Первая программа

Разбираем первую программу по косточкам: package, import, func main.

package main — особый пакет, который превращает программу в исполняемую: именно в нём ищется функция main — точка входа.

Каноническая первая программа

package main

import "fmt"

func main() {
    fmt.Println("Привет, Go!")
}

Вывод:

Привет, Go!

Три строки, а в них вся анатомия Go-программы. Разберём каждую.

package main

Любой файл Go начинается с объявления пакета. Пакет — это единица организации кода, набор файлов в одной папке. Пакет с именем main — особый: компилятор знает, что из него нужно собрать исполняемый файл, и ищет в нём функцию main. Если назвать пакет иначе (например, strings), получится библиотека, а не программа.

import "fmt"

Чтобы пользоваться чужим кодом, его пакет нужно импортировать. fmt (от format) — пакет стандартной библиотеки для ввода-вывода. Из него мы берём Println. Обратите внимание: Go строг к импортам — если импортировать пакет и не использовать его, программа не скомпилируется. Это намеренно: так код не обрастает мёртвыми зависимостями.

func main()

Функция объявляется словом func. main без аргументов и без возвращаемого значения — точка входа. Когда программа запускается, выполнение начинается отсюда. Открывающая фигурная скобка обязана стоять на той же строке, что и объявление, — это не стилистика, а требование языка (иначе автоматическая вставка точек с запятой сломает код).

Print, Println, Printf

В fmt три основных способа печати. Println печатает аргументы через пробел и добавляет перевод строки. Print — без перевода. Printf форматирует по шаблону, как printf в C.

package main

import "fmt"

func main() {
    name := "Аня"
    age := 30
    fmt.Println("Имя:", name)
    fmt.Printf("%s, возраст %d\n", name, age)
    fmt.Printf("Тип age: %T\n", age)
}

Вывод:

Имя: Аня
Аня, возраст 30
Тип age: int

Глаголы форматирования: %s — строка, %d — целое число, %v — значение в формате по умолчанию, %T — тип значения. Универсальный %v печатает почти что угодно, а %+v для структур покажет ещё и имена полей.

Итог

  • package main + func main() = исполняемая программа.
  • Неиспользованный импорт — ошибка компиляции, это норма Go.
  • Println для простой печати, Printf с глаголами %s %d %v %T — для форматированной.
Проверьте себя
1. Зачем нужен пакет с именем main?
AЭто главный модуль проекта
BИз него собирается исполняемый файл и в нём ищется func main
CОн содержит все импорты
DЭто пакет стандартной библиотеки
2. Что произойдёт, если импортировать пакет и не использовать его?
AНичего, импорт просто игнорируется
BПредупреждение, но программа запустится
CОшибка компиляции
DПакет загрузится, но будет медленнее
3. Какой глагол Printf печатает тип значения?
A%d
B%s
C%T
D%v
Поддержать проект