Глиф Учебники

Урок 1. Установка Go и первая программа

Курс «Go» · урок 1 из 10 · 6 минут чтения

В этом уроке на вашем компьютере появится 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, перейти в неё и создать модуль.

Bash
mkdir hello
cd hello
go mod init example.com/hello

Команда ответит:

Терминал
$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello

example.com/hello — путь модуля, его имя. Для учебных программ подойдёт любое, например просто hello. Для настоящих проектов обычно берут адрес репозитория: github.com/имя/проект. Подробнее о модулях — в уроке Пакеты и модули.

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

В папке hello создайте файл main.go:

Go
package main

import "fmt"

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

Запустите её из той же папки:

Bash
go run .
Вывод
Привет, мир!

Точка в go run . значит «программа в текущей папке». Можно назвать и файл: go run main.go.

Разберём программу по строкам:

Имя Println начинается с большой буквы не случайно. В Go с большой буквы начинаются имена, которые пакет экспортирует — разрешает использовать снаружи. Написать fmt.println нельзя: такого доступного имени в пакете нет, и программа не соберётся.

Println и Print

Go
package main

import "fmt"

func main() {
    fmt.Println("Go", 2009, true)
    fmt.Print("без перевода строки")
    fmt.Print(" — продолжение\n")
    fmt.Println(2 + 3)
}
Вывод
Go 2009 true
без перевода строки — продолжение
5

Println ставит пробел между аргументами и перевод строки в конце. Print перевод строки не добавляет — его пишут сами: \n. Как выводить числа с нужной точностью и в колонку — в уроке Ввод и вывод.

Соберите исполняемый файл

go run каждый раз компилирует программу во временную папку и сразу запускает. Чтобы получить готовый файл, который можно скопировать на другой компьютер, служит go build:

Bash
go build
./hello

В папке появится файл hello (в Windows — hello.exe, запускается как .\hello.exe). Имя берётся из последней части пути модуля. Файл работает сам по себе: на компьютере, где его запускают, Go ставить не нужно. Нужно только, чтобы совпадали система и тип процессора, — как собрать программу для другой системы, рассказывает справка Как собрать программу под Windows из Linux.

папка hello go.mod example.com/hello main.go package main go run . go build временная папка программа файл не остаётся Привет, мир! hello hello.exe в Windows запускается без Go нужны та же система и тип процессора
go run . собирает программу во временной папке и сразу запускает, а go build оставляет файл hello с именем из пути модуля, и он запускается без Go при той же системе и типе процессора.

Правила записи

{ на той же строке func main() { fmt.Println("Привет, мир!") ; } ; ; в рамке компилятор ставит сам — например, после ) и } в конце строки { на новой строке func main() ; строка кончилась на ) { fmt.Println("Привет, мир!") ; } ; syntax error: unexpected semicolon or newline before {
Компилятор сам ставит точку с запятой в конце строки после ) или }, поэтому { на новой строке после func main() даёт ошибку unexpected semicolon or newline before {.

Частые ошибки

Коротко

Проверьте себя

1. С какой функции начинается выполнение программы на Go?
2. Что делает команда go mod init example.com/hello?
3. Почему не соберётся вызов fmt.println("Привет")?
4. Чем go build отличается от go run .?