简介
本指南介绍如何构建、测试和发布 Go 包。
GitHub 托管的运行器具有预安装了软件的工具缓存,包括 Go 的依赖项。 有关最新软件和 Go 预安装版本的完整列表,请参阅“AUTOTITLE”。
先决条件
您应该已经熟悉 YAML 语法及其如何与 GitHub Actions 结合使用。 有关详细信息,请参阅“AUTOTITLE”。
建议你对 Go 语言有基本的了解。 有关详细信息,请参阅 Go 入门。
使用 Go 工作流模板
若要快速开始使用,请将工作流模板添加到存储库的 .github/workflows 目录。
GitHub 提供了一个适用于大多数 Go 项目的 Go 工作流模板。 本指南的后续部分提供了如何自定义此工作流模板的示例。
-
在 GitHub 上,导航到存储库的主页面。1. 在仓库名称下,单击“ Actions”****。
1. 如果存储库中已有工作流,请单击“新建工作流”。
-
“选择工作流”页面显示一系列推荐的工作流模板。 搜索“go”。
-
单击“持续集成”以筛选工作流选择。
-
在“Go - 按 GitHub Actions”工作流上,单击“配置”。

-
根据需要编辑工作流。 例如更改 Go 版本。
-
单击“提交更改”。
工作流文件 将添加到存储库的 目录中。
指定 Go 版本
指定 Go 版本的最简单方法是使用由 GitHub 提供的 操作。 有关更多信息,请参阅 操作。
若要在 GitHub 托管的运行器上使用 Go 的预安装版本,请将相关版本传递给 操作的 属性。 此操作从每个运行器上的工具缓存中查找特定版本的 Go,并将必要的二进制文件添加到 。 这些更改将在任务的剩余时间内持续有效。
操作是 Go与 GitHub Actions 结合使用时的推荐方式,因为它帮助确保不同运行器和不同版本的 Go 行为一致。 如果使用自托管运行器,则必须安装 Go 并将其添加到 。
使用多个版本的 Go 程序语言
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v5
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
# You can test your matrix by printing the current Go version
- name: Display Go version
run: go version
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v5
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
# You can test your matrix by printing the current Go version
- name: Display Go version
run: go version
使用特定的 Go 版本
可以将作业配置为使用 Go 的特定版本,例如 。 或者,您也可以使用语义版本语法来获得最新的次要版本。 此示例使用了 Go 1.21 的最新修补版本。
- name: Setup Go 1.21.x
uses: actions/setup-go@v5
with:
# Semantic version range syntax or exact version of Go
go-version: '1.21.x'
- name: Setup Go 1.21.x
uses: actions/setup-go@v5
with:
# Semantic version range syntax or exact version of Go
go-version: '1.21.x'
安装依赖
可以使用 安装依赖项:
steps:
- uses: actions/checkout@v5
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- name: Install dependencies
run: |
go get .
go get example.com/octo-examplemodule
go get example.com/[email protected]
steps:
- uses: actions/checkout@v5
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- name: Install dependencies
run: |
go get .
go get example.com/octo-examplemodule
go get example.com/[email protected]
缓存依赖项
可以使用 操作缓存和还原依赖项。 使用 操作时,默认启用缓存。
操作将在仓库根目录中搜索依赖项文件 ,并使用该依赖项文件的哈希作为缓存密钥的一部分。
当使用多个依赖项文件或这些文件位于不同的子目录中时,可以使用 参数。
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.17'
cache-dependency-path: subdir/go.sum
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.17'
cache-dependency-path: subdir/go.sum
如果有自定义要求或需要更精细的缓存控制,可以使用 操作。 有关详细信息,请参阅“AUTOTITLE”。
构建和测试代码
您可以使用与本地相同的命令来构建和测试代码。 此示例工作流演示如何在作业中使用 和 :
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- name: Install dependencies
run: go get .
- name: Build
run: go build -v ./...
- name: Test with the Go CLI
run: go test
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- name: Install dependencies
run: go get .
- name: Build
run: go build -v ./...
- name: Test with the Go CLI
run: go test
将工作流数据打包为构件
工作流程完成后,您可以上传产生的项目进行分析。 例如,您可能需要保存日志文件、核心转储、测试结果或屏幕截图。 以下示例演示如何使用 操作上传测试结果。
有关详细信息,请参阅“AUTOTITLE”。
name: Upload Go test results
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v5
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Install dependencies
run: go get .
- name: Test with Go
run: go test -json > TestResults-${{ matrix.go-version }}.json
- name: Upload Go test results
uses: actions/upload-artifact@v4
with:
name: Go-results-${{ matrix.go-version }}
path: TestResults-${{ matrix.go-version }}.json
name: Upload Go test results
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v5
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Install dependencies
run: go get .
- name: Test with Go
run: go test -json > TestResults-${{ matrix.go-version }}.json
- name: Upload Go test results
uses: actions/upload-artifact@v4
with:
name: Go-results-${{ matrix.go-version }}
path: TestResults-${{ matrix.go-version }}.json