Первая программа на Go
Чему вы научитесь:
- объяснять, из каких частей состоит программа на Go и где начинается её выполнение;
- читать сообщение компилятора и исправлять ошибку, которую он нашёл;
- подключать пакеты стандартной библиотеки и вызывать их функции;
- писать свою функцию, которая получает числа и возвращает результат.

Программа похожа на рецепт. В рецепте шаги записаны по порядку, и повар выполняет их один за другим, сверху вниз. Компьютер выполняет программу так же: шаг за шагом. Но повар может догадаться, что имел в виду автор, а компьютер — нет. Он делает ровно то, что написано.
Есть и ещё одна разница. Программа на Go — это текст, а процессор выполняет только машинный код. Поэтому текст программы сначала переводят в машинный код, и делает это компилятор.
Представьте строгого корректора: он читает рецепт до того, как тот попадёт на кухню. Если в тексте нарушено хоть одно правило языка, на кухню рецепт не попадёт.
Вот программа, которая печатает одну строку:
package main
import "fmt"
func main() {
fmt.Println("Hello, world") // Hello, world
}Давайте разберём её по строкам:
package mainговорит, что файл относится к исполняемой программе, а не к библиотеке.import "fmt"подключает пакетfmt— готовый код из стандартной библиотеки Go, который печатает текст. Пакет — как банка с готовым продуктом из кладовой: её не готовят, а берут с полки.func main() {открывает функциюmain.fmt.Println("Hello, world")— единственный шаг рецепта: напечататьHello, world.}закрывает функцию.
Где начинается выполнение
Выполнение начинается с функции main. Функция — это именованный блок кода, а её тело — инструкции в фигурных скобках после func main().
Тело main и есть сам рецепт, который выполняет компьютер:
- инструкции выполняются по очереди, сверху вниз;
- после последней из них программа завершается.
Печать через fmt.Println
Запись fmt.Println читается так: функция Println из пакета fmt. Она работает по трём правилам:
- печатает то, что стоит в скобках, и переводит строку;
- текст в двойных кавычках печатает как есть, без кавычек;
- если в скобках несколько значений через запятую, ставит между ними пробел.
Вот оба случая — одно значение и два:
fmt.Println("first") // first
fmt.Println("second", "line") // second line- Первая строка печатает
firstи переходит на новую строку. - Во второй строке в скобках два значения, поэтому между словами появляется пробел, а кавычек в выводе нет.
Сборка и запуск
Чтобы запустить программу, сделайте три шага:
- Сохраните текст программы в файл с расширением
.go, напримерhello.go. - Наберите команду
go run hello.goв окне для текстовых команд. - Команда передаст файл компилятору и сразу запустит то, что получилось.
Если текст нарушает правила языка, компилятор называет ошибку и строку с ней, и программа не запускается.
Здесь картинка с корректором перестаёт работать. Настоящий корректор заметил бы опечатку в слове, а компилятор проверяет правила языка, а не замысел автора. Опечатку в "Helo, world" он пропустит: вы увидите её только в том, что напечатает программа.
Комментарии
Текст от // до конца строки — комментарий, и компилятор его пропускает. В примерах курса комментарий в конце строки показывает, что эта строка печатает.
Частая ошибка
Открывающая фигурная скобка перенесена на следующую строку:
package main
import "fmt"
func main()
{ // ✗
fmt.Println("Hello, world")
}syntax error: unexpected semicolon or newline before {Точка с запятой завершает инструкцию. В Go её не пишут: компилятор сам ставит её в конце строки. Давайте посмотрим, к чему это приводит здесь:
- Компилятор ставит точку с запятой в конце строки
func main(). - Функция на этом заканчивается и остаётся без тела.
- Скобка
{на следующей строке оказывается лишней, и сборка останавливается.
Поэтому открывающая скобка в Go всегда стоит на одной строке с func main().
Главное
- Компилятор переводит текст программы в машинный код и не запускает программу, если нарушено правило языка.
- Выполнение начинается с функции
mainв пакетеmain, и её инструкции идут сверху вниз. fmt.Printlnпечатает значения через пробел и переводит строку.- Открывающая фигурная скобка стоит на одной строке с
func main().