IntelliJ IDEA 2025.2 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 上的构建约束

字段

构建标记

描述

操作系统

GOOS

指定您要为其编译代码的操作系统,例如 linuxwindows

架构

GOARCH

定义代码的 CPU 架构,例如 amd64arm

Go 版本

GOVERSION

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

编译器

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

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

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

最后修改日期: 2025年 9月 22日