go run, go build и модули

go run для быстрого запуска, go build для бинарника, go mod для модулей и зависимостей.

Модуль — единица распространения и версионирования кода в Go; его границы задаёт файл go.mod в корне проекта.

go run: запустить здесь и сейчас

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

go run main.go
# или весь пакет в текущей папке:
go run .

go build: собрать бинарник

Когда программа готова к раздаче, go build компилирует её в один исполняемый файл. Этот файл самодостаточен: на целевой машине не нужен ни Go, ни какие-либо зависимости.

go build -o hello .
./hello        # запуск собранного бинарника

Go умеет кросс-компиляцию: задав переменные GOOS и GOARCH, можно с macOS собрать бинарник под Linux или Windows — без виртуальных машин.

GOOS=linux GOARCH=amd64 go build -o hello-linux .

go mod init: создаём модуль

Любой современный проект на Go — это модуль. Создаётся он одной командой, которой передают путь модуля (обычно адрес репозитория, но для локальных экспериментов сойдёт любое имя).

mkdir myapp && cd myapp
go mod init example.com/myapp

Появится файл go.mod — паспорт проекта. Он хранит имя модуля, требуемую версию Go и список зависимостей:

module example.com/myapp

go 1.22

Зависимости

Когда вы импортируете сторонний пакет и запускаете go build или go mod tidy, Go сам скачивает нужную версию, прописывает её в go.mod и фиксирует контрольные суммы в go.sum. Никаких node_modules на сотни мегабайт — зависимости лежат в общем кэше.

# добавить зависимость явно
go get github.com/google/uuid

# привести go.mod в порядок: убрать лишнее, дописать нужное
go mod tidy
КомандаНазначение
go mod initсоздать модуль (go.mod)
go getдобавить/обновить зависимость
go mod tidyсинхронизировать go.mod с реальными импортами
go run .скомпилировать и запустить
go build .собрать бинарник

Итог

  • go run — быстро запустить, go build — собрать раздаваемый бинарник.
  • go mod init создаёт модуль; go.mod — паспорт проекта с зависимостями.
  • go mod tidy сам приводит список зависимостей в порядок.
Проверьте себя
1. Чем go run отличается от go build?
Ago run только проверяет синтаксис
Bgo run компилирует и сразу запускает, не оставляя бинарник; go build создаёт исполняемый файл
CЭто синонимы
Dgo build запускает программу, а go run компилирует
2. Что хранит файл go.mod?
AСкомпилированный код
BИмя модуля, версию Go и список зависимостей
CТолько тесты
DПеременные окружения
3. Что делает go mod tidy?
AУдаляет весь проект
BФорматирует код
CСинхронизирует go.mod с реально используемыми импортами
DЗапускает тесты
Поддержать проект