0Pricing
Go Academy · Lekcja

Dystrybucja narzędzi CLI

Kompilacja skrośna, goreleaser i tapy homebrew

Dystrybucja narzędzi CLI to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

go install do lokalnej dystrybucji

go install github.com/user/tool@latest kompiluje plik binarny i instaluje go w katalogu $GOPATH/bin. Użytkownicy muszą mieć zainstalowane Go.

Kompilacja krzyżowa

Go natywnie obsługuje kompilację krzyżową. Należy ustawić GOOS i GOARCH, aby wskazać inne systemy operacyjne:

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

Flagi kompilacji na potrzeby wydania

Aby uzyskać mniejsze, statyczne pliki binarne, należy usunąć informacje debugowania i wyłączyć CGO:

CGO_ENABLED=0 go build -ldflags="-s -w" -o myapp

Osadzanie informacji o wersji

Informacje z czasu kompilacji należy wstrzyknąć za pomocą ldflags:

var version = "dev"
var commit  = "none"
// Build: go build -ldflags="-X main.version=1.2.3 -X main.commit=abc1234"

GoReleaser

GoReleaser automatyzuje kompilację krzyżową, pakowanie (tar.gz, .zip), generowanie sum kontrolnych oraz przesyłanie wydań do GitHub. Konfigurację należy umieścić w pliku .goreleaser.yaml.

# .goreleaser.yaml
builds:
  - env: [CGO_ENABLED=0]
    goos: [linux, darwin, windows]
    goarch: [amd64, arm64]

Repozytorium Homebrew

Należy opublikować formułę Homebrew, aby użytkownicy macOS/Linux mogli instalować aplikację za pomocą brew install. GoReleaser może automatycznie wygenerować tę formułę.

GitHub Actions CI/CD

Należy użyć GitHub Action do budowania i publikowania aplikacji po każdym wypchnięciu taga. GoReleaser ma oficjalną akcję GitHub.

- name: Run GoReleaser
  uses: goreleaser/goreleaser-action@v5
  with: { version: latest, args: release --clean }
  env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" }

Dystrybucja za pomocą Dockera

Należy spakować CLI jako obraz Dockera dla użytkowników, którzy preferują kontenery. Warto użyć kompilacji wieloetapowej, aby zachować minimalny rozmiar końcowego obrazu.

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 do zasobów

Należy osadzić pliki statyczne (szablony, schematy konfiguracji) w pliku binarnym za pomocą //go:embed, aby był on w pełni samodzielny.

//go:embed templates/*
var templates embed.FS

Moduły wersjonowane

Moduł CLI należy publikować zgodnie z zasadami wersjonowania modułów Go. W przypadku wersji v2+ ścieżka importu musi zawierać /v2, a ścieżka modułu w pliku go.mod musi się z nią zgadzać.

Kompatybilność wsteczna

Należy stosować semver. Wydania minor mogą dodawać flagi, ale nie mogą usuwać ani zmieniać nazw istniejących flag. Zmiany łamiące kompatybilność wymagają zwiększenia głównego numeru wersji.

Szybki test

Jak skompilować statyczny plik binarny Go dla systemu Linux na komputerze z macOS?

Podsumowanie: dystrybucja narzędzi CLI

Najważniejsze informacje:

  • Kompilacja krzyżowa za pomocą GOOS/GOARCH; CGO_ENABLED=0 dla statycznych plików binarnych
  • GoReleaser do automatyzacji procesu publikowania wydań
  • Wstrzykiwanie wersji za pomocą -ldflags "-X main.version=..."
  • go:embed do tworzenia samodzielnych plików binarnych z osadzonymi zasobami

Często zadawane pytania

Czy lekcja „Dystrybucja narzędzi CLI” jest bezpłatna?

Tak — pełny tekst „Dystrybucja narzędzi CLI” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Dystrybucja narzędzi CLI”?

Kompilacja skrośna, goreleaser i tapy homebrew Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Dystrybucja narzędzi CLI”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy Cobra
  2. Flagi i flagi trwałe
  3. Podpolecenia i grupy poleceń
  4. Dystrybucja narzędzi CLI
← Powrót do Go Academy