0Pricing
Go Academy · Урок

Распространение инструментов 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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы Cobra
  2. Флаги и постоянные флаги
  3. Подкоманды и группы команд
  4. Распространение инструментов CLI
← Назад к Go Academy