Встроенные инструменты Golang.
Благодаря фантастическому набору встроенных инструментов, Go позволяет разработчикам с легкостью писать, создавать и тестировать проекты, а также управлять ими. Усовершенствуем работу с кодом, изучив этот инструментарий.
Вот краткая характеристика всех инструментов:
Познакомимся с ними подробнее. Встроенный инструмент go build go build
С этим инструментом расширяются возможности преобразования добротно сделанного исходного кода Go
Встроенные инструменты Golang...
Благодаря фантастическому набору встроенных инструментов, Go позволяет разработчикам с легкостью писать, создавать и тестировать проекты, а также управлять ими. Усовершенствуем работу с кодом, изучив этот инструментарий.
Вот краткая характеристика всех инструментов:

Познакомимся с ними подробнее.

go build
С этим инструментом расширяются возможности преобразования добротно сделанного исходного кода Go в отдельные исполняемые двоичные файлы, готовые к распространению. go build — воплощение простоты.
Основные идеи
Компиляция без усилий. С go build не нужно ломать голову над сложными конфигурациями проекта или внешними системами сборки, код и зависимости Go интеллектуально анализируются.
Платформонезависимость. Легко генерируются исполняемые файлы для различных операционных систем и архитектур, задаваемых в переменных среды́ GOOS и GOARCH: Linux, Windows, macOS, ARM.
Настройка. С помощью дополнительных параметров go build контролируются название выходного файла и флаги сборки для оптимизации, в двоичный файл напрямую вставляется статическое содержимое.
Пример
# Из текущего пакета собирается исполняемый файл
go build
# Сборка для архитектуры Linux AMD64
GOOS=linux GOARCH=amd64 go build
Когда использовать
- При развертывании. Это основной вариант применения для подготовки приложений Go к независимому запуску в целевых системах.
- При распространении. Упрощается применение другими программного обеспечения, сделанного на Go, среда разработки Go им при этом не требуется.

go install
Это такой же мощный инструмент, как go build. Пакеты или команды им легко компилируются и устанавливаются прямо в рабочую область Go. Поэтому go install — ценный компонент рабочего процесса разработки. Чтобы контролировать совместимость с проектами, при установке указываются версии пакетов.
- Скомпилированные пакеты помещаются
go installв основном в каталогpkgв$GOPATH, а исполняемые файлы — в$GOPATH/bin. - Для управления зависимостями большинства проектов рекомендуются модули Go.
Основные идеи
Установка пакетов. Загружаются и устанавливаются сторонние пакеты Go, их код становится доступным в проектах.
Создание команд. Написанные на Go инструменты командной строки компилируются, а полученные исполняемые файлы наглядно располагаются в каталоге $GOPATH/bin.
Управление зависимостями. Зависимости для устанавливаемого пакета или команды обрабатываются go install автоматически.
Эффективность разработки. Устанавливаются часто используемые команды или локальные пакеты Go, поэтому доступ к ним упрощается, процесс разработки ускоряется.
Пример
# Устанавливается пакет «goreleaser», это средство автоматизации выпусков
go install github.com/goreleaser/goreleaser@latest
# Проверяется корректность установки
goreleaser --help
Когда использовать
- С
go installзагружаются и устанавливаются внешние пакеты Go, в проектах упрощается доступ к их коду. - С
go installкомпилируются написанные на Go инструменты командной строки, для упрощения выполнения они добавляются в каталог$GOPATH/bin.

go clean
go clean — незаменимый инструмент упорядочения проектных каталогов на Go. Им интеллектуально выявляются, удаляются объектные и временные файлы, другие артефакты, сгенерированные в процессе сборки.
Основные идеи
Гигиена рабочей области. Упрощаются проектные каталоги, облегчаются навигация и управление кодом.
Оптимизация сборки. За счет уменьшения объема работы компилятора время сборки в больших проектах потенциально сокращается.
Новый старт. Перед большими сборками или при устранении проблем компиляции все начинается с чистого листа.
Пример
# Очищается текущий каталог проекта
go clean
# Очищается и удаляется весь кэш сборки Go
go clean -cache
# Показывается, что́ очистится, без фактического удаления чего-либо.
go clean -n
Когда использовать
- Периодически.
go cleanвключается в рабочий процесс разработки для поддержания порядка в структуре проекта. - Перед распространением. С
go cleanподготавливаются упрощенные файлы проекта для совместного использования или развертывания. - Для устранения неполадок.
go cleanвыполняют при возникновении неожиданных ошибок сборки, так иногда устраняются проблемы, вызванные устаревшими артефактами сборки.

go fmt
С go fmt исходный код автоматически переформатируется согласно каноническим стилевым рекомендациям Go. Этим инструментом совместно с gofmt закладывается основа общечитаемой, сопровождаемой кодовой базы Go.
Хотя в
go fmtобеспечивается соблюдение официального стиля, во многих коллективах разработчиков согласованность форматирования совершенствуется средствами контроля качества кода и руководствами по стилю.
Основные идеи
Единообразие. Во всем коде Go, независимо от его авторства, соблюдаются согласованные интервалы, отступы, форматирование.
Удобство восприятия. Код Go становится удобнее и понятнее, совершенствуется совместная работа в коллективе.
Акцент на логике. Оставив споры о стиле кода, разработчики концентрируются на основной функциональности программ.
Пример
# Форматируются файлы в текущем каталоге
go fmt
# Форматируются все файлы Go в текущем каталоге и подкаталогах
go fmt ./...
# Проверяется, отформатированы ли файлы, без их изменения
gofmt -l ./...
Когда использовать
- Всегда.
go fmtинтегрируется в процесс разработки, во многих редакторах кода и интегрированных средах разработки при сохранении запускается автоматически. - Перед коммитами.
go fmtзапускается как хук перед фиксацией изменений, этим обеспечивается согласованность кода в коллективе разработчиков. - В устаревших проектах. Применением
go fmtстарый код Go оживляется, мгновенного становится удобнее для восприятия.

go get
Раньше с помощью go get загружались и устанавливались пакеты, но:
- Начиная с версии Go 1.17, установка исполняемых файлов через
go getпрекращена. Теперь для этого используетсяgo install. - С версии Go 1.18 роль
go get— управление зависимостями в файлеgo.mod. - А с версии Go 1.22 — управление зависимостями уже внутри модулей, за их пределами
go getне применяется, в случае подходаGOPATH.
Пример
# Загружаются и обновляются все соответствующие пакеты
go get
# Загружается пакет логирования «github.com/sirupsen/logrus»
go get github.com/sirupsen/logrus
Когда использовать
- В старых кодовых базах.
go getвстречается в устаревших проектах, еще не переведенных на новый инструмент загрузки и установки пакетов — модули Go. - В переходный период. Начиная с Go 1.17,
go getиспользуется для управления зависимостями в файлеgo.mod. - В настоящее время. Начиная с Go 1.22, зависимости управляются
go getтолько внутри модулей.

go mod download
go mod download — важный компонент модульной системы управления зависимостями Go. Им загружаются конкретные версии зависимостей проекта, как определено в файлах go.mod и go.sum.
Основные идеи
Разрешение модулей. Необходимые модули и их зависимости извлекаются и сохраняются в кэше модулей, обычно это $GOPATH/pkg/mod.
Оффлайн-сборки. Загруженные зависимости доступны локально, поэтому над проектом Go можно работать без постоянного интернет-подключения.
Согласованность версий. Предсказуемость сборок обеспечивается точным соответствием указанным в go.mod и go.sum версиям зависимостей.
Пример
# Загружаются зависимости для текущего модуля
go mod download
# Загружаются зависимости для конкретного модуля, особенно во многомодульных конфигурациях
go mod download github.com/some/module
Когда использовать
- При инициализации.
go mod downloadприменяется после инициализации нового модуля Go или при внесении изменений в файлgo.mod. - Перед сборкой. Чтобы все необходимые зависимости имелись заранее,
go mod downloadзапускается доgo build.

go mod tidy
go mod tidy — вспомогательный инструмент системы модулей Go для поддержания чистой, последовательной структуры зависимостей проекта.
Внимание: при выполнении
go mod tidyв файлыgo.modиgo.sumвносятся изменения, которые рекомендуется просматривать перед фиксацией.
Основные идеи
Сопровождение модулей. В файле go.mod точно отображаются зависимости, фактически задействуемые в коде.
Удаление устаревших зависимостей. Выявляются и удаляются записи модулей, не используемые в файлах go.mod и go.sum.
Обновления зависимостей. Недостающие модули получаются, имеющиеся зависимости обновляются до минимально необходимых версий.
Пример
# Приводятся в порядок зависимости модулей текущего проекта
go mod tidy
Когда использовать
- Регулярно.
go mod tidyинтегрируется в рабочий процесс разработки, так файлgo.modподдерживается в оптимальном состоянии. - После серьезных изменений. Запускается после добавления или удаления важного кода, так обеспечивается синхронизация зависимостей.
- Для устранения неполадок. Применением
go mod tidyиногда разрешаются связанные с модулями конфликты или несоответствия.

go mod verify
Этим инструментом обеспечиваются валидность, доступность для загрузки перечисленных в файле go.mod проекта зависимостей, наличие в них ожидаемого содержимого.
Основные идеи
Проверка зависимостей. Проверяется наличие в указанных версиях необходимых зависимостей, содержимое которых подтверждается по контрольной сумме в go.sum.
Обеспечение целостности. Снижением риска неожиданных изменений внешних зависимостей гарантируется воспроизводимость проекта.
Пример
# В каталоге проекта
go mod verify
# Вывод:
# В случае успеха — all modules verified («Все модули проверены»)
# Если обнаружены проблемы — сообщения об ошибках, где указывается, что́ не так с конкретными зависимостями.
Когда использовать
- После изменения зависимостей. Каждый раз, когда меняются версии или добавляются/удаляются зависимости в файле
go.mod. - До развертывания. В качестве проверки перед развертыванием этим инструментом обеспечивается, что проект с указанными зависимостями собирается корректно.
- При регулярных проверках. Чтобы проводить постоянные проверки зависимостей,
go mod verifyинтегрируется в рабочий процесс разработки или в конвейеры непрерывной интеграции и непрерывного развертывания.

go mod vendor
В проектном каталоге создается папка vendor с локальными копиями всех необходимых зависимостей проекта.
Основные идеи
Независимость. Проект становится независимым от репозиториев внешних модулей.
Воспроизводимость. Обеспечиваются согласованные сборки, поскольку зависимости в проекте поставляются локально / загружаются независимо от внешних изменений.
Оффлайн-разработка. Обеспечивается разработка, при которой для получения зависимостей доступ в интернет не требуется.
Пример
# В каталоге проекта
go mod vendor
Когда использовать
- В изолированных сборках. Сборка проекта осуществляется всегда с точно такими же зависимостями, невзирая на изменения во внешних репозиториях.
- В автономных средах. Если проект планируется разрабатывать или развертывать в среде с ограниченным интернет-подключением или без него.
- Для соответствия требованиям. В средах разработки имеются ограничения на использование источников внешних модулей.

go run
С go run код на Go в один прием и компилируется, и выполняется. Инструмент идеален для быстрого тестирования фрагментов кода, экспериментирования с идеями или запуска небольших скриптов Go.
Основные идеи
Компиляция «под капотом». При выполнении go run код временно компилируется в памяти без создания автономного исполняемого файла.
Быстрое прототипирование. Изменения в коде проходятся быстро и без накладных расходов процесса go build.
Временный характер. Выходного двоичного файла не сохраняется, поэтому инструмент хорош для быстрых задач.
Пример
# Запускается один файл Go
go run main.go
# Запускается код внутри пакета
go run ./mypackage
Когда использовать
- При экспериментировании. Идеально для тестирования фрагментов кода Go или изучения функциональности пакетов.
- В простых скриптах. Удобно для выполнения небольших автономных скриптов Go.
- При разработке и отладке. Приходится кстати для быстрых тестов на этапе разработки.

go test
go test — основа автоматизированного тестирования на Go. Корректность и надежность кода обеспечивается этим инструментом благодаря встроенному фреймворку для написания и выполнения модульных тестов.
Основные идеи
Обнаружение тестов. В пакетах Go автоматически выявляются тестовые функции, их названия начинаются на Test, например TestAdd и другие.
Выполнение и отчеты. Запускаемые тесты снабжаются четкими результатами при успехе, сбоях, другой релевантной информацией.
Тестовое покрытие. Чтобы выявлять недостаточно протестированные участки кода, генерируются отчеты о его покрытии go test -cover.
Пример
# Запускаются все тесты в текущем каталоге
go test
# Запускаются тесты для конкретного пакета
go test ./mypackage
# Запускаются тесты с подробным выводом
go test -v
Когда использовать
- На протяжении всей разработки. Тесты пишутся вместе с кодом. Регулярным выполнением
go testповышается качество кода, снижается риск его ухудшения. - Для непрерывной интеграции. Чтобы поддерживать высокий уровень надежности кода,
go testинтегрируется в конвейеры непрерывной интеграции и непрерывного развертывания.

go vet
go vet — встроенное в Go средство статического анализа. Код этим инструментом тщательно сканируется в поисках потенциальных проблем, недостатков, стилистических несоответствий.
Основные идеи
Обнаружение проблем. Наиболее типичные из них: подозрительные конструкции, некорректное форматирование, потенциальные ошибки времени выполнения.
Раннее исправление. Проблемы устраняются на ранней стадии цикла разработки, пока не переросли в баги посерьезнее.
Настраивание. Поддерживаются различные проверки, даже пишутся пользовательские анализаторы.
Пример
# Запускаются рекомендованные vet-проверки текущего пакета
go vet ./...
Когда использовать
- В рабочем процессе разработки. Чтобы отлавливать ошибки заблаговременно,
go vetинтегрируется в процесс разработки. - Перед просмотром кода. Инструмент запускается для предварительной проверки качества.
- Для непрерывной интеграции. Чтобы обеспечить соблюдение стандартов качества кода,
go vetвключается в конвейер непрерывной интеграции и непрерывного развертывания.

go link
go link — это применяемое внутри компилятора Go низкоуровневое инструментальное средство, которым обеспечиваются детализированный контроль над процессом связывания и гибкость, часто упрощаемая в стандартных рабочих процессах сборки на Go.
Основные идеи
Связывание вручную. Объектные файлы и архивы связываются напрямую, обходясь без привычной автоматизации компилятора Go.
Специализированные сборки. Этим инструментом создаются оптимизированные исполняемые файлы, статически связываются библиотеки, тонко настраивается конечный вывод.
Внутренняя операция. go link предназначен в основном для разработчиков самого инструментария Go или тех, у кого очень специфические требования относительно сборки.
Пример
# Объектные файлы «main.o» и «utils.o» связываются в исполняемый файл «myprogram»
go link -o myprogram main.o utils.o
Когда использовать
- Для обычных целей крайне редко. Прямой контроль
go linkбольшинству разработчиков Go не понадобится. С процессами сборки и связывания стандартные инструменты Go справляются, как правило, эффективно. - При разработке инструментария. Больше пригодится работающим над компилятором Go или самой системой сборки.
- При расширенной оптимизации. Потенциальные, но рискованные варианты применения — ручная оптимизация производительности, сборки с высокой степенью настройки.

go doc
С go doc всегда актуальная документация к пакетам Go доступна для чтения прямо с терминала, комментарии извлекаются непосредственно из кода и форматируются.
Основные идеи
Документация у вас под рукой. Не нужно постоянно переключаться между редактором кода и внешним сайтом, чтобы заглянуть в пакет.
Четко и лаконично. Представляется хорошо отформатированная, удобная для чтения документация по пакетам, типам, функциям, константам и многому другому.
Примеры кода. Часто включаются примеры использования, встроенные в комментарии к коду.
Пример
# Показывается документация к пакету «fmt»
go doc fmt
# Просматривается документация к функции «Println» в «fmt»
go doc fmt.Println
# В проекте разыскивается документация к пользовательскому типу
go doc mypackage.MyCustomType
Когда использовать
- При изучении новых пакетов. Быстро понимаются назначение и применение пакетов, с которыми раньше не работали.
- Для напоминания. Получаются подробные напоминания о конкретных функциях или типах, даже в собственном коде.
- Оффлайн-доступ. Идеально для ознакомления с документацией Go, когда подключение к интернету затруднено.
Выходные данные
go docотображаются и в HTML — для просмотра в браузере. Для еще более мощных навигации и поиска воспользуйтесь специальными инструментами, напримерgodoc.orgили запускаемым локально серверомgodoc.

go version
С go version быстро определяется установленная в системе версия Go. Эта информация важна для проверки совместимости, устранения неполадок.
Основные идеи
Сведения о версии. Отображается конкретная версия выпуска Go, например go1.19.5, а также сведения об операционной системе и архитектуре.
Контроль совместимости. Код собирается и тестируется в той же версии Go, на которой запустится в продакшене.
Помощь в устранении неполадок. При обращении за помощью или сообщении о багах предоставляется полезная информация о версии.
Пример
# Проверяется версия Go
go version
Когда использовать
- При настройке проекта. Проверяется наличие требуемой для конкретного проекта версии Go.
- При совместном использовании среды. Вывод
go versionуказывается при предоставлении конфигурации другим участникам или проблемах с поддержкой. - После обновлений. Подтверждается успешная установка или переход на новую версию Go.

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