构建约束与供应商管理
构建约束和 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 中包含,与上述条件相同。
GoLand 可以使用这些约束来决定在验证、解析和符号建议期间必须忽略哪些文件。 如果文件不满足目标系统的要求,GoLand 会显示通知。
在 Go 1.17 及更高版本中, //go:build 指令需要一个约束,例如 //go:build linux。 如果约束为空,GoLand 会报告错误,并提供用于删除注释的快速修复。 添加约束或移除指令。
空的旧版 // +build 指令与 // +build ignore 含义相同: 除非将 ignore 添加到 自定义标签 ,否则该文件会被排除。
配置项目的构建约束
Go 中的 go build 命令 支持 通过 -tags 参数使用自定义标签,以根据构建约束有条件地编译文件。 这些标签允许您指定在构建过程中包含文件的条件。
在 您 的 Go 源文件中,您可以通过在文件顶部放置包含 // +build 或 //go:build 指令及自定义标签的注释来定义构建约束。
打开设置 (Ctrl+Alt+S ),导航至 。
从下拉列表中选择目标系统的预期值。 如果您有任何自定义标签,请在 自定义标签 字段中指定它们(在标签之间使用空格作为分隔符)。
点击 确定。
使用 Go 实验
GoLand 会读取 Go 工具链启用的实验,并使用它们来匹配 goexperiment. 构建标记。 默认启用的实验不需要手动输入。 自动检测需要受信任的项目和已下载的 Go SDK。
按 Ctrl+Alt+S 打开设置并导航到 。
要启用或禁用实验,请在 实验 中输入其名称,不要带
goexperiment.前缀。 用逗号分隔名称。 要禁用工具链支持的实验,请为其名称添加no前缀,例如noswissmap。GoLand 会将这些值传递给 Go 工具链。 工具链的响应决定哪些实验构建标记与您的配置匹配。
构建标签字段描述
有关构建标签或约束的更多信息,请参见 pkg.go.dev 上的构建约束。
字段 | 值 | 描述 |
|---|---|---|
操作系统 |
| 选择目标操作系统。 IDE 会将选定的值作为 在 Go 1.19 及更高版本中, |
架构 |
| 选择目标 CPU 架构。 IDE 会将选定的值作为 |
Go 版本 |
| 匹配指定版本或更高版本的 Go 版本。 例如, |
编译器 |
| 在编译器可用时选择它。 |
CGO 支持 |
| 匹配是否启用了 cgo 支持。 IDE 会将选定的设置作为 |
自定义标签 | 自定义标记名称 | 匹配由 例如,添加 |
实验 | 实验名称 | 启用或禁用 Go 工具链实验。 IDE 会将选定的值作为 这些值跟随环境中已设置的任何 |
使用多个条件进行构建约束
下表比较了条件使用 AND 和 OR 时旧版和当前构建约束语法。
|
|
|---|---|
// +build darwin,cgo linux
逗号(作为逻辑与)和空格(作为逻辑或) | //go:build (darwin && cgo) || linux
|
供应模式
启用 vendoring 模式后,您只使用存储在项目的 vendor 目录下的依赖包来构建应用程序。 在此模式下,Go 命令会忽略 go.mod 中的依赖描述,并假设 vendor 目录保存着依赖的正确副本。 默认情况下,当您使用 Go modules 时, vendor 目录在构建期间会被忽略。
在 Go 1.14 RC 中,自动 vendoring 模式成为了 Go 的内置功能。 从 Go 1.14 RC 开始,GoLand 默认还启用了自动 vendoring 模式。 您可以为每个项目禁用 vendoring,例如,当您有一个包含另一个语言使用的 vendor 文件夹的 monorepo 时。
您可以通过使用 自动启用第三方支持 复选框来控制自动导入功能。 当复选框被选中时,自动引入功能将被启用。 因此,如果您将 vendor 目录添加到模块中,IDE 会使用它。 如果您删除该目录,GoLand 将使用全局 Go Modules 缓存。
切换 vendoring 模式
按下 Ctrl+Alt+S 打开设置,然后选择 。
清除或选择 自动启用第三方支持 复选框,然后点击 确定。