Go语言如何用GitHub Actions_Go语言GitHub Actions教程【秒懂】

张开发
2026/4/13 20:34:13 15 分钟阅读

分享文章

Go语言如何用GitHub Actions_Go语言GitHub Actions教程【秒懂】
应使用 actions/setup-gov4 显式指定 Go 版本如 1.21.6在 checkout 后执行go test 需加 -timeout 30s、GO111MODULEon 和 -count1若启用 -racego build 应用绝对路径输出并设 CGO_ENABLED0私有模块需通过 git config URL 重写注入 token。GitHub Actions 中 go 环境怎么选对版本GitHub Actions 默认的 ubuntu-latest 上预装的 go 版本经常不是你项目需要的——比如你用 go 1.21 开发CI 却跑在 go 1.19 上embed 或泛型行为可能出偏差。用 actions/setup-gov4 显式指定版本别依赖系统自带 go-version 支持语义化写法1.21取最新 patch、1.21.6精确锁定 如果项目用了 go.work确保 setup-go 在 checkout 之后执行否则工作区识别失败 避免写 go-version: latest——它不指向 Go 官方最新稳定版而是 actions 自维护的“最近缓存版”可能滞后两周 steps: - uses: actions/checkoutv4 - uses: actions/setup-gov4 with: go-version: 1.21.6为什么 go test 在 CI 里总超时或漏跑本地能过CI 报 timeout: failed to run tests 或只跑了个 TestMain 就退出大概率是没传对参数或没处理好模块上下文。默认 go test ./... 会递归进 vendor/ 或 internal/ 子模块但某些目录含非标准测试入口导致 panic 或死循环 加 -timeout 30s 是必须的否则默认 10 分钟卡住后整个 job 被平台强制终止 GO111MODULEon 必须显式设置尤其当 repo 根目录没 go.mod 但子目录有多个 module 时CI 容易误判为 GOPATH 模式 如果用 test -race记得加 -count1Go 的竞态检测不支持 -count 多次运行否则静默失败 run: go test -v -timeout 30s -race -count1 ./...go build 输出二进制在 GitHub Actions 里找不到build 成功但后续步骤提示 No such file or directory: ./myapp不是路径错了是没设对输出目标或没处理跨平台问题。go build 默认输出到当前目录但 Actions 的工作目录$GITHUB_WORKSPACE和你 cd 进去的路径可能不一致 不要依赖相对路径统一用绝对路径输出go build -o $GITHUB_WORKSPACE/bin/myapp . 如果要发布多平台二进制如 macOS/Linux/Windows别用 GOOSlinux go build 这种 shell 变量方式——Actions 的 run 步骤默认用 sh不支持 GOOSxxx cmd 这种写法得拆成两行或改用 env: 注意 CGO_ENABLED0默认开启 CGO交叉编译时容易因缺失 C 工具链失败静态链接需求下务必关掉 env: CGO_ENABLED: 0 GOOS: linux GOARCH: amd64run: go build -o $GITHUB_WORKSPACE/bin/myapp .私有模块拉不到go get 提示 401 Unauthorized项目依赖了 GitHub 私有库或企业内网 Git 服务CI 里 go mod download 直接 401不是 token 没配是没告诉 Go 怎么用 token 认证。 WisPaper 复旦大学研发的AI学术搜索工具5分钟内筛选1000篇论文

更多文章