Встроенные инструменты Go

Обзор штатного инструментария языка — от сборки до документации · 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 build go build

Инструмент превращает исходный код Go в отдельные исполняемые двоичные файлы, готовые к распространению. Код и зависимости анализируются автоматически — без сложных конфигураций и внешних систем сборки.

Основные идеи

Пример

# Из текущего пакета собирается исполняемый файл
go build

# Сборка для архитектуры Linux AMD64
GOOS=linux GOARCH=amd64 go build

Когда использовать


📦 go install go install

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

Скомпилированные пакеты помещаются в каталог pkg в $GOPATH, а исполняемые файлы — в $GOPATH/bin. Для управления зависимостями большинства проектов рекомендуются модули Go.

Основные идеи

Пример

# Устанавливается «goreleaser» — средство автоматизации выпусков
go install github.com/goreleaser/goreleaser@latest

# Проверяется корректность установки
goreleaser --help

Когда использовать


🧽 go clean go clean

Незаменимый инструмент упорядочения проектных каталогов: выявляет и удаляет объектные, временные файлы и другие артефакты, сгенерированные при сборке.

Основные идеи

Пример

# Очищается текущий каталог проекта
go clean

# Очищается и удаляется весь кэш сборки Go
go clean -cache

# Показывается, что очистится, без фактического удаления
go clean -n

Когда использовать


🎨 go fmt go fmt

Автоматически переформатирует исходный код согласно каноническим стилевым рекомендациям Go. Вместе с gofmt закладывает основу читаемой и сопровождаемой кодовой базы.

Инструмент обеспечивает официальный стиль, но во многих командах согласованность форматирования дополнительно усиливают линтерами и руководствами по стилю.

Основные идеи

Пример

# Форматируются файлы в текущем каталоге
go fmt

# Форматируются все файлы Go в текущем каталоге и подкаталогах
go fmt ./...

# Проверяется, отформатированы ли файлы, без их изменения
gofmt -l ./...

Когда использовать


⬇️ go get go get

Раньше через go get загружались и устанавливались пакеты, но роль инструмента заметно изменилась с эволюцией модульной системы.

История изменений по версиям

Пример

# Загружаются и обновляются все соответствующие пакеты
go get

# Загружается пакет логирования «github.com/sirupsen/logrus»
go get github.com/sirupsen/logrus

Когда использовать


📥 go mod download go mod download

Важный компонент модульной системы: загружает конкретные версии зависимостей проекта, как определено в файлах go.mod и go.sum.

Основные идеи

Пример

# Загружаются зависимости для текущего модуля
go mod download

# Загружаются зависимости для конкретного модуля (многомодульные конфигурации)
go mod download github.com/some/module

Когда использовать


🧹 go mod tidy go mod tidy

Вспомогательный инструмент системы модулей: поддерживает чистую и согласованную структуру зависимостей проекта.

При выполнении go mod tidy изменяются файлы go.mod и go.sum — просматривайте эти изменения перед фиксацией.

Основные идеи

Пример

# Приводятся в порядок зависимости текущего проекта
go mod tidy

Когда использовать


🔐 go mod verify go mod verify

Подтверждает, что перечисленные в go.mod зависимости валидны, доступны для загрузки и содержат ожидаемое содержимое.

Основные идеи

Пример

# В каталоге проекта
go mod verify

# Вывод:
# В случае успеха — all modules verified
# При проблемах — сообщения об ошибках по конкретным зависимостям

Когда использовать


📁 go mod vendor go mod vendor

Создаёт в каталоге проекта папку vendor с локальными копиями всех необходимых зависимостей.

Основные идеи

Пример

# В каталоге проекта
go mod vendor

Когда использовать


▶️ go run go run

Одним приёмом компилирует и выполняет код на Go. Идеален для быстрого тестирования фрагментов, экспериментов и запуска небольших скриптов.

Основные идеи

Пример

# Запускается один файл Go
go run main.go

# Запускается код внутри пакета
go run ./mypackage

Когда использовать


🧪 go test go test

Основа автоматизированного тестирования на Go: встроенный фреймворк для написания и выполнения модульных тестов обеспечивает корректность и надёжность кода.

Основные идеи

Пример

# Запускаются все тесты в текущем каталоге
go test

# Запускаются тесты для конкретного пакета
go test ./mypackage

# Запускаются тесты с подробным выводом
go test -v

Когда использовать


🔎 go vet go vet

Встроенное средство статического анализа: сканирует код в поисках потенциальных проблем, недостатков и стилистических несоответствий.

Основные идеи

Пример

# Запускаются рекомендованные vet-проверки текущего пакета
go vet ./...

Когда использовать


🔗 go link go link

Низкоуровневое средство внутри компилятора Go: даёт детализированный контроль над процессом связывания и гибкость, обычно скрытую в стандартных сборках.

Основные идеи

Пример

# Объектные файлы связываются в исполняемый «myprogram»
go link -o myprogram main.o utils.o

Когда использовать


📖 go doc go doc

Показывает всегда актуальную документацию к пакетам Go прямо в терминале: комментарии извлекаются из кода и форматируются.

Основные идеи

Пример

# Показывается документация к пакету «fmt»
go doc fmt

# Просматривается документация к функции «Println» в «fmt»
go doc fmt.Println

# В проекте разыскивается документация к пользовательскому типу
go doc mypackage.MyCustomType

Когда использовать

Выходные данные go doc отображаются и в HTML — для просмотра в браузере. Для более мощной навигации и поиска подойдут специальные инструменты, например godoc.org или локально запускаемый сервер godoc.

🏷 go version go version

Быстро определяет установленную в системе версию Go — информация важна для проверки совместимости и устранения неполадок.

Основные идеи

Пример

# Проверяется версия Go
go version

Когда использовать


🏁 Заключение

Философия простоты и эффективности Go в полной мере распространяется на его инструментарий. От сборки исполняемых файлов через go build до управления зависимостями через go mod и изучения документации через go doc — практически каждый этап разработки упрощён продуманными командами.

Благодаря их интеграции и акценту на продуктивности укрепляется репутация Go как языка быстрых результатов. Освоив встроенные инструменты, разработчик — опытный или начинающий — полнее раскроет свой потенциал, создавая элегантные и надёжные приложения.