Урок курса
Установка Go и первая программа: go run
Golang с нуляGo — компилируемый язык, и прежде чем писать код, нужно убедиться, что компилятор вообще установлен. Начнём с этого.
Установка Go и проверка через go version
Официальная инструкция по установке живёт на go.dev/doc/install — там же выбирается нужная ОС. Для Windows и macOS страница предлагает установщик: скачали, запустили, прошли по шагам. Для Linux путь чуть длиннее: скачиваете архив и выполняете несколько команд из инструкции, которые распаковывают его в /usr/local/go и прописывают нужные пути.
После установки важно открыть новый терминал — существующий может не подхватить обновлённые переменные окружения. Затем выполните:
go version
Если всё прошло успешно, терминал ответит примерно так:
go version go1.22.3 linux/amd64
Эта строка означает три вещи: команда go найдена в PATH, версия установлена корректно, архитектура совпадает с вашей машиной. Если терминал вместо этого пишет command not found — установщик не прописал путь автоматически, и нужно вернуться к инструкции для вашей ОС и проверить шаг с PATH.
Ничего больше делать не нужно: Go поставляется с полным инструментарием, никаких дополнительных пакетов для старта не требуется.
Минимальный каркас Go-программы: package main, import, func main, fmt.Println
Создайте в удобном месте папку для проекта и внутри неё файл main.go. Минимальная работающая программа выглядит так:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
В этом примере четыре элемента. package main и func main() образуют каркас исполняемой программы, а import "fmt" и fmt.Println нужны именно для выбранного способа вывести строку.
package main — каждый обычный Go-файл объявляет пакет; до строки package могут стоять комментарии и служебные директивы. Имя main здесь особенное: вместе с функцией main оно делает пакет исполняемой программой. Пакет с другим именем может быть корректной библиотекой, но go run не запустит его как программу.
import "fmt" — директива подключает пакет fmt из стандартной библиотеки Go. Без неё идентификатор fmt в коде будет неизвестен компилятору. Здесь есть симметричное правило в обе стороны: импортировать пакет и не использовать его — тоже ошибка компиляции. Go не разрешает мёртвый импорт. Это вынуждает держать зависимости чистыми с самого начала.
func main() — функция без параметров и без возвращаемых значений, с которой операционная система начинает выполнение программы. Она должна быть именно в пакете main. Если переименовать её в func start() — программа не запустится: точки входа не будет.
fmt.Println(...) — вызов функции Println из пакета fmt. Она выводит переданные аргументы в терминал и добавляет перевод строки. Запись fmt.Println читается как «функция Println из пакета fmt» — пакет и функция разделяются точкой.
Если убрать package main или func main(), исполняемая программа потеряет необходимый каркас. Если убрать import "fmt", пока в коде остаётся fmt.Println, компилятор не сможет найти имя fmt. Пустая func main() {} при этом корректно собирается без fmt: импорт нужен нашему примеру, а не каждой программе Go.
go run: запуск программы и чтение ошибок компилятора
Находясь в папке с main.go, выполните:
go run main.go
Команда компилирует файл во временный бинарник и тут же запускает его — никакого промежуточного файла в папке не появляется. Если каркас написан верно, терминал напечатает:
Hello, World!
Теперь намеренно сломайте программу — удалите строку import "fmt" и снова запустите go run main.go. Вместо приветствия увидите что-то вроде:
./main.go:6:2: undefined: fmt
Ошибки компилятора содержат имя файла, номер строки, столбец и описание проблемы. Главное: это сообщение появляется до запуска программы. fmt.Println не успевает выполниться — компилятор прерывает процесс раньше, и строка Hello, World! не выводится вообще.
Попробуйте второй вариант поломки — удалите закрывающую фигурную скобку функции main. Ошибка будет другой по тексту, но компилятор снова укажет место рядом с проблемой. Номер строки — хорошая отправная точка, хотя реальная причина иногда находится строкой выше, например у незакрытой скобки.
Итак, два сигнала выглядят по-разному. Диагностика компилятора имеет формат файл:строка:столбец: описание и появляется сразу, до того как программа начала работать. Вывод самой программы — то, что печатает fmt.Println — появляется только после успешной компиляции. Если компилятор нашёл ошибку, вывода программы не будет вовсе.
Оговорка для точности: когда программа уже запущена, она тоже может сообщать об ошибках — через stderr или код завершения. Но это происходит во время выполнения, а не на этапе компиляции. На текущем этапе достаточно различать два момента: ошибка до запуска (компилятор) и текст на экране после успешного запуска (программа).
Попробуйте решить
Какая строка объявления пакета обязательна, чтобы go run main.go успешно запустил программу с fmt.Println?
Продолжить с проверкой и прогрессом
Откройте интерактивный раннер с заданиями урока.
