IntelliJ IDEA 2025.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 中包含,与上述条件相同。

构建约束

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

有关构建约束的通知

配置项目的构建约束

Go 中的 go build 命令 支持 通过 -tags 参数使用自定义标签,以根据构建约束有条件地编译文件。 这些标签允许您指定在构建过程中包含文件的条件。

在 您 的 Go 源文件中,您可以通过在文件顶部放置包含 // +build 或 //go:build 指令及自定义标签的注释来定义构建约束。

  1. 打开设置 (Ctrl+Alt+S ),导航至 语言与框架 | Go 构建标签。

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

  3. 点击 OK。

    配置项目的构建约束

使用 Go 实验

  1. 按 Ctrl+Alt+S 打开设置,然后转到 Go | 构建标签。

  2. 请在其中一个字段中输入 Go 实验的 Type 标签:

    • 自定义标记 :按以下格式输入标记: goexperiment.rangefunc goexperiment.loopvar。 请使用空格将标签彼此分开。

    • 实验 :按以下格式输入标记: rangefunc, loopvar。 使用逗号分隔标签。

    标签名称位于相应的软件包内。 例如,访问 iter 包时,您会注意到紧随 go:build 标签之后的标签名称。 专门针对 iter 包,标签是 goexperiment.rangefunc。 在 自定义标记 字段中输入完整标签,而在 实验 字段中仅输入 goexperiment. 之后的部分。

构建标签字段描述

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

Field

构建标记

描述

操作系统

GOOS

指定您要为其编译代码的操作系统,例如 linux 或 windows。

体系结构

GOARCH

定义代码的 CPU 架构,例如 amd64 或 arm。

Go 版本

GOVERSION

告知您已安装的 Go 版本。 这是您在运行 go version 时看到的相同版本。

编译器

根据您运行时可用的编译器,选择像 gccgo 或 gc 一样的编译器。

CGO 支持

CGO_ENABLED

显示 cgo 是否启用(1)或禁用(0),这会影响您是否可以包含 C 代码。

自定义标签

由 //go:build 注释行引入的任何 构建标签。

例如,在以下截图中, goexperiment.rangefunc build 标签允许对函数执行迭代操作,函数来自 Go Experiments。

实验

GOEXPERIMENT

您可以开启或关闭的 Go 工具链实验列表。 主要供从事 Go 自身开发的开发者使用。

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

由于引入了新的构建约束语法,请考虑下表,它列出了在使用多个条件时两种语法之间的差异。

//+build

//go:build

//+build darwin,cgo linux

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

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

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

供应模式

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

  1. 按 Ctrl+Alt+S 打开设置,然后选择 语言与框架 | Go | Go 模块。

  2. 清除或选择 自动启用供应支持 复选框,然后点击 OK。

2026年 1月 23日