GoLand 2026.3 Help

构建约束与供应商管理

构建约束和 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 指令及自定义标签的注释来定义构建约束。

  1. 打开设置 (Ctrl+Alt+S ),导航至 前往 | 构建标记。

  2. 从下拉列表中选择目标系统的预期值。 如果您有任何自定义标签,请在 自定义标签 字段中指定它们(在标签之间使用空格作为分隔符)。

  3. 点击 确定。

使用 Go 实验

GoLand 会读取 Go 工具链启用的实验,并使用它们来匹配 goexperiment. 构建标记。 默认启用的实验不需要手动输入。 自动检测需要受信任的项目和已下载的 Go SDK。

  1. 按 Ctrl+Alt+S 打开设置并导航到 Go | 构建标签。

  2. 要启用或禁用实验,请在 实验 中输入其名称,不要带 goexperiment. 前缀。 用逗号分隔名称。 要禁用工具链支持的实验,请为其名称添加 no 前缀,例如 noswissmap。

    GoLand 会将这些值传递给 Go 工具链。 工具链的响应决定哪些实验构建标记与您的配置匹配。

构建标签字段描述

有关构建标签或约束的更多信息,请参见 pkg.go.dev 上的构建约束。

字段

值

描述

操作系统

linux、 windows

选择目标操作系统。 IDE 会将选定的值作为 GOOS 传递给 Go。

在 Go 1.19 及更高版本中, unix 构建约束会匹配 Unix 目标,包括 linux、 darwin 和 solaris。

架构

amd64、 arm64

选择目标 CPU 架构。 IDE 会将选定的值作为 GOARCH 传递给 Go。

Go 版本

go1.N

匹配指定版本或更高版本的 Go 版本。 例如, go1.22 匹配 Go 1.22 及更高版本。

编译器

gc、 gccgo

在编译器可用时选择它。

CGO 支持

cgo、 !cgo

匹配是否启用了 cgo 支持。 IDE 会将选定的设置作为 CGO_ENABLED 传递给 Go。

自定义标签

自定义标记名称

匹配由 //go:build 注释行引入的自定义标记。

例如,添加 integration 以包含具有 //go:build integration 约束的文件。

实验

实验名称

启用或禁用 Go 工具链实验。 IDE 会将选定的值作为 GOEXPERIMENT 传递给 Go。

这些值跟随环境中已设置的任何 GOEXPERIMENT 值之后。 Go 会从左到右应用它们,因此实验的最后一个值会生效。 例如,此字段中的 noswissmap 会重写运行配置中的 GOEXPERIMENT=swissmap。

使用多个条件进行构建约束

下表比较了条件使用 AND 和 OR 时旧版和当前构建约束语法。

// +build

//go:build

// +build darwin,cgo linux

逗号(作为逻辑与)和空格(作为逻辑或)

//go:build (darwin && cgo) || linux

&& 运算符(逻辑 And )和 || 运算符(逻辑 Or)

供应模式

启用 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 模式

  1. 按下 Ctrl+Alt+S 打开设置,然后选择 前往 | Go 模块。

  2. 清除或选择 自动启用第三方支持 复选框,然后点击 确定。

2026年 11月 9日