Урок 1. Установка Go и первая программа
В этом уроке на вашем компьютере появится Go, а в нём — первая программа: вы её запустите и соберёте в отдельный исполняемый файл. Понадобится около двадцати минут.
Установите Go
Скачайте установщик с официального сайта, со страницы загрузки go.dev. Для Windows это файл .msi, для macOS — .pkg: запустите его и пройдите шаги, ничего не меняя. Для Linux там лежит архив .tar.gz, его распаковывают в /usr/local/go. Подробно для каждой системы — в справке Как установить Go.
Скачивайте Go только с go.dev. Сборки с других сайтов могут быть устаревшими или изменёнными.
После установки откройте новое окно терминала (в Windows — командную строку или PowerShell) и проверьте:
$ go version
go version go1.22.5 linux/amd64Номер версии и система у вас будут свои: например, windows/amd64. Главное, чтобы версия была 1.22 или новее. Если вместо версии появилось «command not found» или «не является внутренней или внешней командой», загляните в справку go: command not found.
Редактор
Программы на Go — обычные текстовые файлы с расширением .go, набирать их можно в любом редакторе. Удобнее всего бесплатный VS Code с расширением Go (его выпускает команда разработчиков Go): найдите его по слову «Go» во вкладке расширений. Расширение подсвечивает ошибки прямо при наборе, дописывает import и выравнивает код при сохранении. При первом открытии файла .go оно предложит доустановить свои инструменты — согласитесь.
Попробовать Go совсем без установки можно в песочнице на go.dev. Там удобно проверять небольшие примеры, но программы, которые читают ввод с клавиатуры, в песочнице не работают.
Создайте модуль
Каждая программа на Go живёт в модуле — папке с файлом go.mod, где записаны имя модуля и версия Go. Создайте папку и модуль в ней — наберите в терминале три команды: создать папку hello, перейти в неё и создать модуль.
mkdir hello
cd hello
go mod init example.com/helloКоманда ответит:
$ go mod init example.com/hello
go: creating new go.mod: module example.com/helloexample.com/hello — путь модуля, его имя. Для учебных программ подойдёт любое, например просто hello. Для настоящих проектов обычно берут адрес репозитория: github.com/имя/проект. Подробнее о модулях — в уроке Пакеты и модули.
Первая программа
В папке hello создайте файл main.go:
package main
import "fmt"
func main() {
fmt.Println("Привет, мир!")
}Запустите её из той же папки:
go run .Привет, мир!Точка в go run . значит «программа в текущей папке». Можно назвать и файл: go run main.go.
Разберём программу по строкам:
package main— файл относится к пакетуmain. Это особый пакет: из него получается исполняемая программа. Код других пакетов — это библиотеки.import "fmt"— подключает пакет fmt из стандартной библиотеки: в нём функции ввода и вывода. Произносят «фмт» или «формат».func main()— функция, с которой начинается выполнение программы. Когда она заканчивается, заканчивается и программа.fmt.Println(...)— функцияPrintlnиз пакетаfmt: печатает свои аргументы и переводит строку.
Имя Println начинается с большой буквы не случайно. В Go с большой буквы начинаются имена, которые пакет экспортирует — разрешает использовать снаружи. Написать fmt.println нельзя: такого доступного имени в пакете нет, и программа не соберётся.
Println и Print
package main
import "fmt"
func main() {
fmt.Println("Go", 2009, true)
fmt.Print("без перевода строки")
fmt.Print(" — продолжение\n")
fmt.Println(2 + 3)
}Go 2009 true
без перевода строки — продолжение
5Println ставит пробел между аргументами и перевод строки в конце. Print перевод строки не добавляет — его пишут сами: \n. Как выводить числа с нужной точностью и в колонку — в уроке Ввод и вывод.
Соберите исполняемый файл
go run каждый раз компилирует программу во временную папку и сразу запускает. Чтобы получить готовый файл, который можно скопировать на другой компьютер, служит go build:
go build
./helloВ папке появится файл hello (в Windows — hello.exe, запускается как .\hello.exe). Имя берётся из последней части пути модуля. Файл работает сам по себе: на компьютере, где его запускают, Go ставить не нужно. Нужно только, чтобы совпадали система и тип процессора, — как собрать программу для другой системы, рассказывает справка Как собрать программу под Windows из Linux.
Правила записи
- Точка с запятой в конце строки не нужна. Компилятор ставит её сам там, где кончается строка.
- Открывающая скобка
{— на той же строке, чтоfunc main(),ifилиfor. Если перенести её на следующую строку, компилятор подставит точку с запятой не туда и сообщитsyntax error: unexpected semicolon or newline before {. - Комментарии —
// до конца строкии/* несколько строк */. - Оформление одно для всех. Отступы — табуляцией, пробелы вокруг знаков — по правилам программы
gofmt. Командаgo fmtприводит к этому виду файлы в текущей папке (go fmt ./...— и во всех вложенных), а VS Code с расширением Go делает это при каждом сохранении. Спорить о стиле в Go не принято: код у всех выглядит одинаково.
Частые ошибки
go: go.mod file not found in current directory or any parent directory— командаgo run .запущена не в папке модуля или модуль не создан. Решение — в справке go mod init и go.mod file not found."os" imported and not used— подключён пакет, который не используется. В Go это ошибка, а не предупреждение: imported and not used.package … is not a main package— в первой строке файла написано неpackage main, а запускать можно только пакетmain.undefined: fmt— пакет используется, но забытimport "fmt".
Коротко
- Go ставится с go.dev; проверка —
go versionв новом окне терминала. - Программа живёт в модуле:
go mod init имясоздаёт файлgo.mod. - Исполняемая программа —
package mainи функцияfunc main(). go run .— собрать и сразу запустить,go build— собрать файл программы.- Экспортируемые имена — с большой буквы:
fmt.Println. {всегда на той же строке, оформление —go fmt.