构建约束与 vendoring 模式
构建约束与 vendoring 模式是可用于优化构建流程的工具。通过构建约束,您可以定义文件包含到包中的条件。启用 vendoring 模式后,您可以确保应用仅使用项目中存储的依赖包进行构建。该方法允许您在包中包含特定文件集合,并使用已在本地修改或修补的依赖项。 通过构建约束,您可以定义文件包含到包中的条件。 启用 vendoring 模式后,您可以确保应用仅使用项目中存储的依赖包进行构建。 该方法允许您在包中包含特定文件集合,并使用已在本地修改或修补的依赖项。
构建约束
构建约束,也称为构建标签,是用于说明文件在何种条件下包含到包中的行注释。 这些标签可指定操作系统、架构、Go 版本、编译器、cgo 支持或其他目标系统要求等依赖条件。 在以下示例中,我们声明该文件适用于满足以下条件的目标系统:
//+build darwin,cgo linux是旧版构建标签语法,Go 仍可识别。 它指定了两组条件:darwin,cgo:在为darwin平台(macOS)编译且启用了cgo时包含。cgo允许在 Go 程序中引入 C 代码。linux:在为 Linux 平台编译时包含。
空格表示“或”运算符,即该文件应在启用 cgo 的 macOS 或 Linux 平台中包含。
//go:build (darwin && cgo) || linux是从 Go 1.17 开始引入的新版构建标签语法,使用更明确的布尔表达式形式:(darwin && cgo) || linux:该文件应在启用 cgo 的 macOS 或 Linux 中构建,等同于上述条件。

GoLand 可使用这些约束判断在验证、解析与符号建议期间需忽略哪些文件。 若某文件不满足目标系统的要求,GoLand 将显示一条通知。 例如,截图中的以下条件将与 为项目配置构建约束操作 中的设置发生冲突。

为项目配置构建约束
Go 中的 go build 命令 支持通过 -tags 参数使用自定义标签,基于构建约束有条件地编译文件。 这些标签允许您指定文件在构建流程中包含的条件。
在 Go 源文件中,您可以在文件顶部添加注释,并包含 // +build 或 //go:build 指令及自定义标签,以定义构建约束。
打开设置(Ctrl+Alt+S ),然后导航至 。
从下拉列表中选择目标系统的期望值。 如果有任何自定义标签,请在 自定义标记 字段中指定,标签之间使用空格分隔。
点击 确定。

使用 Go 实验特性
按下 Ctrl+Alt+S 打开设置,然后导航至 。
在以下任一字段中键入 Go 实验功能的标签:
自定义标记 :按照以下格式输入标签:
goexperiment.rangefunc goexperiment.loopvar。 使用空格将标签彼此分隔。实验 :按照以下格式输入标签:
rangefunc、loopvar。 使用逗号将标签彼此分隔。
标签名称位于对应的包中。 例如,在访问
iter包时,您会看到标签名称紧跟在go:build标签之后。 对于iter包而言,标签为goexperiment.rangefunc。 在 自定义标记 字段中输入完整标签,在 实验 字段中仅输入goexperiment.之后的部分。
构建标签字段说明
有关构建标签或约束的更多信息,请参阅 pkg.go.dev 上关于构建约束的文档。
字段 | 构建标签 | 描述 |
|---|---|---|
操作系统 |
| 指定要为其编译代码的操作系统,例如 |
架构 |
| 定义代码的 CPU 架构,例如 |
Go 版本 |
| 显示已安装的 Go 版本。 这与运行 |
编译器 | 根据运行时环境中可用的内容选择编译器,例如 | |
CGO 支持 |
| 显示是否启用(1)或禁用(0)cgo,会影响是否可以包含 C 代码。 |
自定义标签 | 由注释行 例如,在以下截图中,构建标签 ![]() | |
实验 |
| 可启用或禁用的 Go 工具链实验列表。 主要供 Go 自身的开发者使用。 |
使用多个条件设置构建约束
由于引入了新的构建约束语法,请参考下表以了解在使用多个条件时这两种语法的差异。
|
|
|---|---|
//+build darwin,cgo linux
使用逗号(表示逻辑与)和空格(表示逻辑或) | //go:build (darwin && cgo) || linux
|
Vendoring 模式
启用 vendor 模式后,应用程序只使用存储在项目中 vendor 目录下的依赖包进行构建。 在该模式下,Go 命令会忽略 go.mod 中的依赖描述,并假定 vendor 目录包含正确的依赖副本。 默认情况下,当使用 Go 模块时,构建过程中会忽略 vendor 目录。
在 Go 1.14 RC 中,自动 vendor 模式成为 Go 内置功能。 从 Go 1.14 RC 开始,GoLand 默认也会启用自动 vendor 模式。 您可以按项目禁用 vendor,例如当 monorepo 中包含由其他语言使用的 vendor 文件夹时。
您可以使用复选框 自动启用供应支持 控制是否启用自动 vendor。 选择复选框后,会启用自动 vendor。 因此,如果将 vendor 目录添加到模块中,则 IDE 会使用它。 如果您移除该目录,则 GoLand 会使用全局 Go Modules 缓存。
切换 vendoring 模式
按 Ctrl+Alt+S 打开设置,然后选择 。
清除或选中 自动启用供应支持 复选框后,点击 确定。
