构建约束与供应商管理
构建约束和 vendoring 模式是您可以用来微调构建过程的工具。 通过构建约束,您可以定义规则来确定哪些文件包含在包中。 通过启用 vendoring mode,您可以确保您的应用程序仅使用存储在您的项目中的依赖包构建。 这种方法允许您在包中包含特定文件,并使用您已在本地修改或修补过的依赖项。
构建约束
构建约束,也称为构建标签,是一行注释,概述了包含文件在包中的条件。 这些标签可以指定操作系统、架构、Go 版本、编译器、cgo 支持或其他目标系统需求等要求。 在以下示例中,我们声明此文件适用于满足以下条件的目标系统:
//+build darwin,cgo linux是 Go 中仍然被识别的旧语法构建标签。 它规定了两组条件:darwin,cgo:在为darwin平台(macOS)编译时,并且启用了cgo时包括在构建中。cgo允许在 Go 程序中包含 C 代码。linux:编译 Linux 平台时包含。
空格作为 OR 运算符,意味着该文件应包含在启用了 cgo 的 macOS 或 Linux 中。
//go:build (darwin && cgo) || linux是 Go 1.17 引入的新构建标签语法,采用更明确的布尔表达式格式:(darwin && cgo) || linux:该文件应包含在启用 cgo 的 macOS 构建中,或在 Linux 中包含,与上述条件相同。

IntelliJ IDEA 可以使用这些约束来决定在验证、解析和符号建议期间必须忽略哪些文件。 如果文件不满足目标系统的要求,IntelliJ IDEA 会显示通知。 例如,截图上的以下条件将与 为您的项目配置构建约束的过程中的设置冲突。

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

使用 Go 实验
通过按下 Ctrl+Alt+S 打开设置,并导航到 。
请在其中一个字段中输入 Go 实验的 Type 标签:
自定义标记 :按以下格式输入标签:
goexperiment.rangefunc goexperiment.loopvar。 请使用空格将标签彼此分开。实验 :按以下格式输入标签:
rangefunc, loopvar。 使用逗号分隔标签。
标签名称位于相应的软件包内。 例如,访问
iter包时,您会注意到紧随go:build标签之后的标签名称。 专门针对iter包,标签是goexperiment.rangefunc。 在 自定义标记 字段中输入完整标签,而在 实验 字段中仅输入goexperiment.之后的部分。
构建标签字段描述
有关构建标签或约束的更多信息,请参见 pkg.go.dev 上的构建约束。
字段 | 构建标记 | 描述 |
|---|---|---|
操作系统 |
| 指定您要为其编译代码的操作系统,例如 |
架构 |
| 定义代码的 CPU 架构,例如 |
Go 版本 |
| 告知您已安装的 Go 版本。 这是您在运行 |
编译器 | 根据您运行时可用的编译器,选择像 | |
CGO 支持 |
| 显示 cgo 是否启用(1)或禁用(0),这会影响您是否可以包含 C 代码。 |
自定义标签 | 由 例如,在以下截图中, | |
实验 |
| 您可以开启或关闭的 Go 工具链实验列表。 主要面向从事 Go 自身开发的开发者。 |
使用多个条件进行构建约束
由于引入了新的构建约束语法,请考虑下表,它列出了在使用多个条件时两种语法之间的差异。
|
|
|---|---|
//+build darwin,cgo linux
逗号(作为逻辑与)和空格(作为逻辑或) | //go:build (darwin && cgo) || linux
|
Vendoring
启用 vendoring 模式后,您只使用存储在项目的 供应商 目录下的依赖包来构建应用程序。 在此模式下,Go 命令会忽略 go.mod 中的依赖描述,并假设 供应商 目录保存着依赖的正确副本。 默认情况下,当您使用 Go modules 时, 供应商 目录在构建期间会被忽略。
在 Go 1.14 RC 中,自动 vendoring 模式成为了 Go 的内置功能。 从 Go 1.14 RC 开始,IntelliJ IDEA 默认还启用了自动 vendoring 模式。 您可以为每个项目禁用 vendoring,例如,当您有一个包含另一个语言使用的 供应商 文件夹的 monorepo 时。
您可以通过使用 自动启用供应支持 复选框来控制自动导入功能。 当复选框被选中时,自动引入功能将被启用。 因此,如果您将 供应商 目录添加到模块中,IDE 会使用它。 如果您删除该目录,IntelliJ IDEA 将使用全局 Go Modules 缓存。
切换 vendoring 模式
按 Ctrl+Alt+S 打开设置,然后选择 。
清除或选择 自动启用供应支持 复选框,然后点击 OK。