GoLand 2025.2 Help

构建约束与 vendoring 模式

构建约束与 vendoring 模式是可用于优化构建流程的工具。通过构建约束,您可以定义文件包含到包中的条件。启用 vendoring 模式后,您可以确保应用仅使用项目中存储的依赖包进行构建。该方法允许您在包中包含特定文件集合,并使用已在本地修改或修补的依赖项。 通过构建约束,您可以定义文件包含到包中的条件。 启用 vendoring 模式后,您可以确保应用仅使用项目中存储的依赖包进行构建。 该方法允许您在包中包含特定文件集合,并使用已在本地修改或修补的依赖项。

构建约束

构建约束,也称为构建标签,是用于说明文件在何种条件下包含到包中的行注释。 这些标签可指定操作系统、架构、Go 版本、编译器、cgo 支持或其他目标系统要求等依赖条件。 在以下示例中,我们声明该文件适用于满足以下条件的目标系统:

  • //+build darwin,cgo linux 是旧版构建标签语法,Go 仍可识别。 它指定了两组条件:

    • darwin,cgo :在为 darwin 平台(macOS)编译且启用了 cgo 时包含。 cgo 允许在 Go 程序中引入 C 代码。

    • linux :在为 Linux 平台编译时包含。

    空格表示“或”运算符,即该文件应在启用 cgo 的 macOS 或 Linux 平台中包含。

  • //go:build (darwin && cgo) || linux 是从 Go 1.17 开始引入的新版构建标签语法,使用更明确的布尔表达式形式:

    • (darwin && cgo) || linux :该文件应在启用 cgo 的 macOS 或 Linux 中构建,等同于上述条件。

构建约束

GoLand 可使用这些约束判断在验证、解析与符号建议期间需忽略哪些文件。 若某文件不满足目标系统的要求,GoLand 将显示一条通知。 例如,截图中的以下条件将与 为项目配置构建约束操作 中的设置发生冲突。

关于构建约束的通知

为项目配置构建约束

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

在 Go 源文件中,您可以在文件顶部添加注释,并包含 // +build//go:build 指令及自定义标签,以定义构建约束。

  1. 打开设置(Ctrl+Alt+S ),然后导航至 Go 构建标签

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

  3. 点击 确定

    为项目配置构建约束

使用 Go 实验特性

  1. 按下 Ctrl+Alt+S 打开设置,然后导航至 Go | 构建标签

  2. 在以下任一字段中键入 Go 实验功能的标签:

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

    • 实验 :按照以下格式输入标签: rangefunc、loopvar。 使用逗号将标签彼此分隔。

    标签名称位于对应的包中。 例如,在访问 iter 包时,您会看到标签名称紧跟在 go:build 标签之后。 对于 iter 包而言,标签为 goexperiment.rangefunc。 在 自定义标记 字段中输入完整标签,在 实验 字段中仅输入 goexperiment. 之后的部分。

    使用 Go 实验特性

构建标签字段说明

有关构建标签或约束的更多信息,请参阅 pkg.go.dev 上关于构建约束的文档

字段

构建标签

描述

操作系统

GOOS

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

架构

GOARCH

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

Go 版本

GOVERSION

显示已安装的 Go 版本。 这与运行 go version 时看到的版本相同。

编译器

根据运行时环境中可用的内容选择编译器,例如 gccgogc

CGO 支持

CGO_ENABLED

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

自定义标签

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

例如,在以下截图中,构建标签 goexperiment.rangefunc 启用了对函数的迭代,该函数来自 Go Experiments

使用 Go 实验特性

实验

GOEXPERIMENT

可启用或禁用的 Go 工具链实验列表。 主要供 Go 自身的开发者使用。

使用多个条件设置构建约束

由于引入了新的构建约束语法,请参考下表以了解在使用多个条件时这两种语法的差异。

//+build

//go:build

//+build darwin,cgo linux

使用逗号(表示逻辑与)和空格(表示逻辑或)

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

&& 运算符(逻辑 )与 || 运算符(逻辑

Vendoring 模式

启用 vendor 模式后,应用程序只使用存储在项目中 vendor 目录下的依赖包进行构建。 在该模式下,Go 命令会忽略 go.mod 中的依赖描述,并假定 vendor 目录包含正确的依赖副本。 默认情况下,当使用 Go 模块时,构建过程中会忽略 vendor 目录。

在 Go 1.14 RC 中,自动 vendor 模式成为 Go 内置功能。 从 Go 1.14 RC 开始,GoLand 默认也会启用自动 vendor 模式。 您可以按项目禁用 vendor,例如当 monorepo 中包含由其他语言使用的 vendor 文件夹时。

您可以使用复选框 自动启用供应支持 控制是否启用自动 vendor。 选择复选框后,会启用自动 vendor。 因此,如果将 vendor 目录添加到模块中,则 IDE 会使用它。 如果您移除该目录,则 GoLand 会使用全局 Go Modules 缓存。

切换 vendoring 模式

  1. Ctrl+Alt+S 打开设置,然后选择 Go | Go 模块

  2. 清除或选中 自动启用供应支持 复选框后,点击 确定

    Go 1.13 及更早版本中的自动 vendoring 模式
最后修改日期: 2025年 9月 26日