Agent Skillsnixopus/nixopus › go-deploy

go-deploy

GitHub

提供Go项目的构建与部署指南,涵盖版本检测、静态二进制编译、CGO配置、工作区处理及Dockerfile最佳实践。

api/skills/go-deploy/SKILL.md nixopus/nixopus

Trigger Scenarios

部署Go应用 检测到go.mod文件

Install

npx skills add nixopus/nixopus --skill go-deploy -g -y
More Options

Non-standard path

npx skills add https://github.com/nixopus/nixopus/tree/master/api/skills/go-deploy -g -y

Use without installing

npx skills use nixopus/nixopus@go-deploy

指定 Agent (Claude Code)

npx skills add nixopus/nixopus --skill go-deploy -a claude-code -g -y

安装 repo 全部 skill

npx skills add nixopus/nixopus --all -g -y

预览 repo 内 skill

npx skills add nixopus/nixopus --list

SKILL.md

Frontmatter
{
    "name": "go-deploy",
    "metadata": {
        "version": "1.0"
    },
    "description": "Build and deploy Go applications — version detection, static binaries, CGO, workspaces, and Dockerfile patterns. Use when deploying a Go project, or when go.mod is detected."
}

Go Deployment

Detection

Project is Go if any of these exist:

  • go.mod at the build context root
  • go.work at the root (Go workspaces)
  • main.go at the root

Versions

Go version priority:

  1. go.modgo directive (e.g. go 1.21)
  2. .go-version file, mise.toml, or .tool-versions
  3. Defaults to 1.23

Build

Build Command

  • Single module: go build -ldflags="-w -s" -o /app/out .
  • CGO disabled (static): CGO_ENABLED=0 go build -ldflags="-w -s" -o /app/out .
  • To build a specific binary from cmd/, target it directly: go build -ldflags="-w -s" -o /app/<name> ./cmd/<name>
  • For workspaces, specify the module path: go build -ldflags="-w -s" -o /app/out ./<module>

Main Package Resolution

  1. Root directory if it contains .go files
  2. First subdirectory in cmd/ (e.g. ./cmd/server)
  3. For workspaces (go.work): first module with a main package

Output

  • Binary: /app/out or /app/<name>
  • Static binary when CGO_ENABLED=0

Go Workspaces

For multi-module projects with go.work:

  • Discovers and copies all module dependencies
  • Builds first module with main.go by default
  • Specify the target module path to build a different one

CGO Support

Default: CGO disabled (CGO_ENABLED=0) for static binaries. If CGO needed:

  • Set CGO_ENABLED=1
  • Build stage needs: gcc, g++, libc6-dev
  • Runtime needs libc6 for dynamic linking
  • Use debian:bookworm-slim instead of alpine for runtime

Port Detection

  1. PORT in .env / .env.example
  2. Source code patterns: :8080, ListenAndServe, Run( in main.go
  3. Default: 8080

Framework / Library Detection

Import / package Category
net/http Standard library
github.com/gin-gonic/gin Gin
github.com/labstack/echo Echo
github.com/go-chi/chi Chi
github.com/valyala/fasthttp FastHTTP
github.com/gofiber/fiber Fiber

Install Stage Optimization

Copy in order:

  • go.mod, go.sum (and go.work if workspace)
  • Workspace: copy all module directories referenced in go.work
  • *.go (or full source for multi-package)

Copy go.mod + go.sum first for layer caching.

Caching

Use BuildKit cache mount:

RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    go build -ldflags="-w -s" -o /app/out .

Base Images

Stage Image
Build golang:1.23-alpine or golang:1.23-bookworm
Runtime (static) gcr.io/distroless/static or alpine:latest
Runtime (CGO) debian:bookworm-slim

Dockerfile Patterns

Static Binary (Alpine runtime)

FROM golang:1.23-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o /app/out .

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /app
COPY --from=build /app/out .
EXPOSE 8080
CMD ["./out"]

Distroless Runtime

FROM golang:1.23-bookworm AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o /app/out .

FROM gcr.io/distroless/static
WORKDIR /app
COPY --from=build /app/out .
EXPOSE 8080
CMD ["./out"]

cmd layout

FROM golang:1.23-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o /app/server ./cmd/server

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /app
COPY --from=build /app/server .
EXPOSE 8080
CMD ["./server"]

Go workspace

FROM golang:1.23-alpine AS build
WORKDIR /app
COPY go.work go.work.sum ./
COPY api/go.mod api/go.sum ./api/
COPY shared/go.mod shared/go.sum ./shared/
RUN go mod download ./api/...
COPY api/ ./api/
COPY shared/ ./shared/
RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o /app/out ./api

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /app
COPY --from=build /app/out .
EXPOSE 8080
CMD ["./out"]

Gotchas

  • CGO_ENABLED=0 is required for truly static binaries — without it, the binary may dynamically link glibc and fail on Alpine/distroless
  • go.sum must be committed to the repo — missing it causes go mod download to fail in Docker
  • Multi-binary repos with cmd/ layout require specifying the target: go build ./cmd/server, not just go build .
  • Alpine runtime images need ca-certificates for outbound HTTPS — distroless/static includes them by default
  • Go modules cache at /go/pkg/mod — use BuildKit cache mounts to avoid re-downloading on every build

Version History

  • cf05d97 Current 2026-08-20 14:52

Same Skill Collection

api/skills/api-catalog/SKILL.md
api/skills/caddyfile-generation/SKILL.md
api/skills/compose-setup/SKILL.md
api/skills/container-resource-tuning/SKILL.md
api/skills/cpp-deploy/SKILL.md
api/skills/database-migration/SKILL.md
api/skills/deno-deploy/SKILL.md
api/skills/deploy-delegation/SKILL.md
api/skills/deploy-flow/SKILL.md
api/skills/deployment-analysis/SKILL.md
api/skills/diagnostic-workflow/SKILL.md
api/skills/dockerfile-generation/SKILL.md
api/skills/dockerignore-generation/SKILL.md
api/skills/domain-attachment/SKILL.md
api/skills/domain-tls-routing/SKILL.md
api/skills/dotnet-deploy/SKILL.md
api/skills/elixir-deploy/SKILL.md
api/skills/failure-diagnosis/SKILL.md
api/skills/github-onboarding/SKILL.md
api/skills/github-workflow/SKILL.md
api/skills/gleam-deploy/SKILL.md
api/skills/incident-response/SKILL.md
api/skills/java-deploy/SKILL.md
api/skills/machine-ops/SKILL.md
api/skills/mcp-integrations/SKILL.md
api/skills/monorepo-strategy/SKILL.md
api/skills/nixopus-docs/SKILL.md
api/skills/node-deploy/SKILL.md
api/skills/onboarding/SKILL.md
api/skills/php-deploy/SKILL.md
api/skills/post-deploy-verification/SKILL.md
api/skills/pre-deploy-checklist/SKILL.md
api/skills/python-deploy/SKILL.md
api/skills/rollback-strategy/SKILL.md
api/skills/ruby-deploy/SKILL.md
api/skills/rust-deploy/SKILL.md
api/skills/self-heal/SKILL.md
api/skills/shell-deploy/SKILL.md
api/skills/static-deploy/SKILL.md

Metadata

Files
0
Version
cf05d97
Hash
fc5170c1
Indexed
2026-08-20 14:52

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-29 23:16
浙ICP备14020137号-1 $방문자$