Первое и очевидное, что вы узнаете, изучая новый язык программирования, — это, конечно же, программа «Hello World».

Следующий код — это минимально необходимый код для отображения «Hello Golang» в вашем терминале:

package main
import (
  "fmt"
)
func main() {
  fmt.Println("Hello Golang")
}

Это… с моей точки зрения много! Не потому, что в нем 71 символ и 7 строк кода. Нет — в этом коде есть много вещей, которые нужно объяснить.

Я имею в виду по сравнению с «Hello Kotlin»:

fun main() {
  println("Hello Kotlin")
}

Вы можете возразить, что у нас есть package и import в Котлине. Но для этого примера это не требуется!

В любом случае, давайте пошагово разберем пример с Голанга.

Программа начинается с ключевого слова package — как в Kotlin, когда вы помещаете свой код в ключевое слово package. Точка входа — при ее запуске — объявляется в файле с main package, для которого требуется func с именем main.

Следующий фрагмент кода — это вызов import. Это также похоже на Котлин. Вы должны объявить packages, которые хотите использовать в своей программе.
Значение fmt package (должен быть «где-то» файл, который объявил package fmt в своем заголовке) имеет func с именем Println.

Это интересный момент. import «поиск» файлов, в заголовке которых указано package XY. С этой информацией мы могли бы представить, что «где-то» есть файл, который выглядит следующим образом:

package fmt
func Println(…) { }

Возможно, вы уже задавались вопросом, почему я написал "somewhere". Ну, потому что я не знаю, откуда он взялся и какие существуют «пакеты по умолчанию»!

Обратите внимание, что есть и другой стиль для import, который выглядит как import "packageName". Преимущество использования стиля «вызов» заключается в том, что вы можете import несколько пакетов одновременно, не повторяя ключевое слово import:

import (
  "fmt"
  "math"
)

И последнее, но не менее важное: функция main. Это — как я сказал выше — точка входа и первая функция, которая будет вызываться при запуске кода.

Пожалуйста, имейте в виду, что я объясню синтаксис func в другом посте. В противном случае это взорвет этот блог.

Вызовы функций на самом деле очень похожи на Kotlin. Единственная разница здесь в том, что вы должны — в Golang — всегда ставить имя package (которое мы объявили в разделе import) перед вызовом func. Это в Котлине более или менее необязательно. Потому что вы также можете использовать some.package.afunction() вместо его импорта и напрямую вызывать функцию (расширения).

Источники обучения

Я узнал об этом, прочитав A Tour of Go. А точнее из основных разделов.