Обзор штатного инструментария языка — от сборки до документации · 03.06.2024
Благодаря богатому набору встроенных инструментов Go позволяет легко писать, собирать, тестировать проекты и управлять ими. Ниже — краткая сводка, а затем разбор каждого инструмента по отдельности.
| Инструмент | Описание | Применение |
|---|---|---|
go build | Код Go компилируется в исполняемый файл | Для создания автономных программ |
go install | Компилируются и устанавливаются пакеты Go | Пакеты могут использоваться в других проектах |
go clean | Удаляются остатки сборки | Для упорядочения каталогов проекта |
go fmt | Код Go форматируется для обеспечения согласованности | Поддерживается чёткий стиль кода |
go get | Импортируются зависимости модулей | С версии Go 1.22 зависимости управляются только внутри модулей |
go mod download | Загружаются зависимости проекта | Управление зависимостями для сборки |
go mod tidy | Зависимости приводятся в порядок | Недопущение конфликтов зависимостей |
go mod verify | Проверяются перечисленные в go.mod зависимости | Обеспечение целостности зависимостей, их доступности для загрузки |
go mod vendor | Создаётся локальная папка vendor с копиями зависимостей | Все зависимости сохраняются локально |
go run | Код Go компилируется и тут же запускается | Быстрое тестирование без создания исполняемых файлов |
go test | Запускаются модульные тесты | Автоматизированное тестирование кода |
go vet | Код Go анализируется на предмет проблем | Потенциальные ошибки отлавливаются заблаговременно |
go link | Пакеты связываются для специализированных сборок | Рабочие процессы сложных сборок |
go doc | Изучается документация пакетов Go | Поиск сведений о функциях и типах |
go version | Проверяется установленная версия Go | Обеспечивается совместимость |
Инструмент превращает исходный код Go в отдельные исполняемые двоичные файлы, готовые к распространению. Код и зависимости анализируются автоматически — без сложных конфигураций и внешних систем сборки.
GOOS и GOARCH (Linux, Windows, macOS, ARM).# Из текущего пакета собирается исполняемый файл
go build
# Сборка для архитектуры Linux AMD64
GOOS=linux GOARCH=amd64 go build
Такой же мощный инструмент, как go build: компилирует и устанавливает пакеты или команды прямо в рабочую область Go. Чтобы контролировать совместимость с проектами, при установке указываются версии пакетов.
Скомпилированные пакеты помещаются в каталог pkg в $GOPATH, а исполняемые файлы — в $GOPATH/bin. Для управления зависимостями большинства проектов рекомендуются модули Go.
$GOPATH/bin.# Устанавливается «goreleaser» — средство автоматизации выпусков
go install github.com/goreleaser/goreleaser@latest
# Проверяется корректность установки
goreleaser --help
$GOPATH/bin для удобного запуска.Незаменимый инструмент упорядочения проектных каталогов: выявляет и удаляет объектные, временные файлы и другие артефакты, сгенерированные при сборке.
# Очищается текущий каталог проекта
go clean
# Очищается и удаляется весь кэш сборки Go
go clean -cache
# Показывается, что очистится, без фактического удаления
go clean -n
Автоматически переформатирует исходный код согласно каноническим стилевым рекомендациям Go. Вместе с gofmt закладывает основу читаемой и сопровождаемой кодовой базы.
Инструмент обеспечивает официальный стиль, но во многих командах согласованность форматирования дополнительно усиливают линтерами и руководствами по стилю.
# Форматируются файлы в текущем каталоге
go fmt
# Форматируются все файлы Go в текущем каталоге и подкаталогах
go fmt ./...
# Проверяется, отформатированы ли файлы, без их изменения
gofmt -l ./...
Раньше через go get загружались и устанавливались пакеты, но роль инструмента заметно изменилась с эволюцией модульной системы.
go get прекращена — теперь для этого go install.go get — управление зависимостями в файле go.mod.go get не применяется.# Загружаются и обновляются все соответствующие пакеты
go get
# Загружается пакет логирования «github.com/sirupsen/logrus»
go get github.com/sirupsen/logrus
go.mod.Важный компонент модульной системы: загружает конкретные версии зависимостей проекта, как определено в файлах go.mod и go.sum.
$GOPATH/pkg/mod).go.mod и go.sum.# Загружаются зависимости для текущего модуля
go mod download
# Загружаются зависимости для конкретного модуля (многомодульные конфигурации)
go mod download github.com/some/module
go.mod.go build, чтобы все зависимости имелись заранее.Вспомогательный инструмент системы модулей: поддерживает чистую и согласованную структуру зависимостей проекта.
go mod tidy изменяются файлы go.mod и go.sum — просматривайте эти изменения перед фиксацией.go.mod точно отражаются реально используемые зависимости.go.mod и go.sum вычищаются неиспользуемые записи.# Приводятся в порядок зависимости текущего проекта
go mod tidy
go.mod в оптимальном состоянии.Подтверждает, что перечисленные в go.mod зависимости валидны, доступны для загрузки и содержат ожидаемое содержимое.
go.sum.# В каталоге проекта
go mod verify
# Вывод:
# В случае успеха — all modules verified
# При проблемах — сообщения об ошибках по конкретным зависимостям
go.mod.Создаёт в каталоге проекта папку vendor с локальными копиями всех необходимых зависимостей.
# В каталоге проекта
go mod vendor
Одним приёмом компилирует и выполняет код на Go. Идеален для быстрого тестирования фрагментов, экспериментов и запуска небольших скриптов.
go build.# Запускается один файл Go
go run main.go
# Запускается код внутри пакета
go run ./mypackage
Основа автоматизированного тестирования на Go: встроенный фреймворк для написания и выполнения модульных тестов обеспечивает корректность и надёжность кода.
Test (например, TestAdd), выявляются автоматически.go test -cover показывают недостаточно протестированные участки.# Запускаются все тесты в текущем каталоге
go test
# Запускаются тесты для конкретного пакета
go test ./mypackage
# Запускаются тесты с подробным выводом
go test -v
Встроенное средство статического анализа: сканирует код в поисках потенциальных проблем, недостатков и стилистических несоответствий.
# Запускаются рекомендованные vet-проверки текущего пакета
go vet ./...
Низкоуровневое средство внутри компилятора Go: даёт детализированный контроль над процессом связывания и гибкость, обычно скрытую в стандартных сборках.
# Объектные файлы связываются в исполняемый «myprogram»
go link -o myprogram main.o utils.o
Показывает всегда актуальную документацию к пакетам Go прямо в терминале: комментарии извлекаются из кода и форматируются.
# Показывается документация к пакету «fmt»
go doc fmt
# Просматривается документация к функции «Println» в «fmt»
go doc fmt.Println
# В проекте разыскивается документация к пользовательскому типу
go doc mypackage.MyCustomType
go doc отображаются и в HTML — для просмотра в браузере. Для более мощной навигации и поиска подойдут специальные инструменты, например godoc.org или локально запускаемый сервер godoc.Быстро определяет установленную в системе версию Go — информация важна для проверки совместимости и устранения неполадок.
go1.19.5), а также ОС и архитектура.# Проверяется версия Go
go version
Философия простоты и эффективности Go в полной мере распространяется на его инструментарий. От сборки исполняемых файлов через go build до управления зависимостями через go mod и изучения документации через go doc — практически каждый этап разработки упрощён продуманными командами.
Благодаря их интеграции и акценту на продуктивности укрепляется репутация Go как языка быстрых результатов. Освоив встроенные инструменты, разработчик — опытный или начинающий — полнее раскроет свой потенциал, создавая элегантные и надёжные приложения.