Распространение инструментов CLI
Кросс-компиляция, goreleaser и tap-репозитории homebrew
«Распространение инструментов CLI» — бесплатный урок Go Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
go install для локального распространения
go install github.com/user/tool@latest компилирует и устанавливает двоичный файл в $GOPATH/bin. Пользователям необходимо установить Go.
Кросс-компиляция
Go изначально поддерживает кросс-компиляцию. Установите GOOS и GOARCH, чтобы выбрать другую операционную систему:
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64
GOOS=darwin GOARCH=arm64 go build -o myapp-darwin-arm64
GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exeФлаги сборки для выпуска
Удалите отладочную информацию и отключите CGO, чтобы получить меньшие статические двоичные файлы:
CGO_ENABLED=0 go build -ldflags="-s -w" -o myappВстраивание информации о версии
Внедряйте информацию во время сборки с помощью ldflags:
var version = "dev"
var commit = "none"
// Build: go build -ldflags="-X main.version=1.2.3 -X main.commit=abc1234"GoReleaser
GoReleaser автоматизирует кросс-компиляцию, упаковку (tar.gz, .zip), создание контрольных сумм и загрузку выпусков в GitHub. Настройте его в .goreleaser.yaml.
# .goreleaser.yaml
builds:
- env: [CGO_ENABLED=0]
goos: [linux, darwin, windows]
goarch: [amd64, arm64]Репозиторий Homebrew
Опубликуйте формулу Homebrew, чтобы пользователи macOS/Linux могли устанавливать приложение с помощью brew install. GoReleaser может автоматически создать формулу.
CI/CD с GitHub Actions
Используйте GitHub Action, чтобы выполнять сборку и выпуск при каждой отправке тега. Для GoReleaser существует официальный GitHub Action.
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5
with: { version: latest, args: release --clean }
env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" }Распространение через Docker
Упакуйте CLI в образ Docker для пользователей, предпочитающих контейнеры. Используйте многоэтапную сборку, чтобы сохранить минимальный размер итогового образа.
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp
FROM scratch
COPY --from=build /app/myapp /myapp
ENTRYPOINT ["/myapp"]go:embed для ресурсов
Встраивайте статические файлы (шаблоны, схемы конфигурации) в двоичный файл с помощью //go:embed, чтобы он был полностью автономным.
//go:embed templates/*
var templates embed.FSВерсионируемые модули
Публикуйте модуль CLI в соответствии с правилами версионирования модулей Go. Для v2+ путь импорта должен содержать /v2, а путь модуля в go.mod должен ему соответствовать.
Обратная совместимость
Следуйте семантическому версионированию. В минорных выпусках можно добавлять флаги, но нельзя удалять или переименовывать существующие. Несовместимые изменения требуют увеличения мажорной версии.
Быстрая проверка
Как собрать статический двоичный файл Go для Linux на компьютере macOS?
Повторение: распространение инструментов CLI
Ключевые моменты:
- Кросс-компиляция с помощью GOOS/GOARCH; CGO_ENABLED=0 для статических двоичных файлов
- GoReleaser для автоматизированного конвейера выпуска
- Внедрение версии с помощью -ldflags "-X main.version=..."
- go:embed для автономных двоичных файлов со встроенными ресурсами
Часто задаваемые вопросы
Урок «Распространение инструментов CLI» бесплатный?
Да — полный текст урока «Распространение инструментов CLI» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Распространение инструментов CLI»?
Кросс-компиляция, goreleaser и tap-репозитории homebrew Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Распространение инструментов CLI»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы Cobra
- Флаги и постоянные флаги
- Подкоманды и группы команд
- Распространение инструментов CLI