文章目录
- “与”逻辑:标签间用空格分隔,必须同时满足才编译代码标签://go:build linux && amd64(仅Linux+64位系统生效)编译命令:go build -tags "linux amd64"(必须同时传两个标签,才会包含这段代码) “非”逻辑:用!排除标签,匹配“不含该标签”的代码代码标签://go:build !windows(除Windows外所有系统生效)编译命令:go build -tags "linux"(无需额外传!windows,只要标签不是windows就会包含)
- 控制标准库功能:通过标签启用标准库“隐藏功能”例:go build -tags netgo(强制让net库用纯Go实现的网络协议,而非系统底层C实现,避免跨平台依赖问题) 配合第三方库“条件依赖”:只编译指定库的代码代码里引了两个数据库库(mysql/redis),分别打标签: //go:build use_mysql import _ “github.com/go-sql-driver/mysql” //go:build use_redis import _ “github.com/redis/go-redis/v9” 编译时只引mysql(不引redis):go build -tags use_mysql(自动排除redis依赖,减小程序体积) 多标签批量生效:一次传多个标签,匹配“任意一个”或“组合条件”命令:go build -tags "prod linux amd64"(会包含:prod标签代码 + linux+amd64组合标签代码 + 无标签代码)
- 维度 go build -tags <标签> go install -tags <标签> 输出位置 默认在当前目录生成可执行文件(可通过 -o 指定路径) 固定安装到 $GOPATH/bin 或 $GOBIN 目录(无需 -o,文件名固定为包名) 适用场景 临时编译、本地测试(输出文件留在项目内) 安装可执行程序到系统可执行路径(方便全局调用,如工具类程序) 对模块缓存的影响 不影响,仅生成可执行文件 会将编译结果缓存到模块缓存($GOPATH/pkg/mod),加速后续安装
- 两者的 -tags 用法、逻辑(与/或/非)、对代码的过滤规则完全相同。例如: 用标签区分 dev/prod 环境时: # 本地编译一个dev版本的可执行文件(留在当前目录) go build -tags dev -o myapp-dev # 安装prod版本到全局路径(可直接在终端用myapp命令调用) go install -tags prod
- 若想临时编译一个可执行文件到当前目录(如测试),用 go build -tags <标签>; 若想将程序安装到全局路径方便长期使用,用 go install -tags <标签>; 两者的 -tags 作用完全一样,仅命令的输出位置和用途不同。 到此这篇关于go build -tags的其他用法的文章就介绍到这了,更多相关go build -tags用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: gin通过go build -tags实现json包切换及库分析 go build -tags构建约束试验示例解析
目录
- 一、go build -tags用法?
- 1. 进阶逻辑用法(标签组合更灵活)
- 2. 关联依赖/编译细节的冷门实用用法
- 1. 核心差异:命令本身的作用
- 2.-tags参数的一致性
- 总结
- 二、go build -tags和go install -tags有什么区别?
- “与”逻辑:标签间用空格分隔,必须同时满足才编译
代码标签://go:build linux && amd64(仅Linux+64位系统生效)
编译命令:go build -tags "linux amd64"(必须同时传两个标签,才会包含这段代码)
- “非”逻辑:用
!排除标签,匹配“不含该标签”的代码
代码标签://go:build !windows(除Windows外所有系统生效)
编译命令:go build -tags "linux"(无需额外传!windows,只要标签不是windows就会包含)
代码标签:
//go:build linux && amd64(仅Linux+64位系统生效)编译命令:
go build -tags "linux amd64"(必须同时传两个标签,才会包含这段代码)!排除标签,匹配“不含该标签”的代码代码标签:
//go:build !windows(除Windows外所有系统生效)编译命令:
go build -tags "linux"(无需额外传!windows,只要标签不是windows就会包含)
控制标准库功能:通过标签启用标准库“隐藏功能”
例:go build -tags netgo(强制让net库用纯Go实现的网络协议,而非系统底层C实现,避免跨平台依赖问题)
配合第三方库“条件依赖”:只编译指定库的代码
代码里引了两个数据库库(mysql/redis),分别打标签:
//go:build use_mysql import _ "github.com/go-sql-driver/mysql" //go:build use_redis import _ "github.com/redis/go-redis/v9"
编译时只引mysql(不引redis):go build -tags use_mysql(自动排除redis依赖,减小程序体积)
多标签批量生效:一次传多个标签,匹配“任意一个”或“组合条件”
命令:go build -tags "prod linux amd64"(会包含:prod标签代码 + linux+amd64组合标签代码 + 无标签代码)
go build -tags 和 go install -tags 中的 -tags 参数功能完全一致(都是通过标签控制编译哪些代码),核心区别在于 go build 和 go install 这两个命令本身的行为差异,而非 -tags 的用法。
| 维度 | go build -tags <标签> | go install -tags <标签> |
|---|---|---|
| 输出位置 | 默认在当前目录生成可执行文件(可通过 -o 指定路径) |
固定安装到 $GOPATH/bin 或 $GOBIN 目录(无需 -o,文件名固定为包名) |
| 适用场景 | 临时编译、本地测试(输出文件留在项目内) | 安装可执行程序到系统可执行路径(方便全局调用,如工具类程序) |
| 对模块缓存的影响 | 不影响,仅生成可执行文件 | 会将编译结果缓存到模块缓存($GOPATH/pkg/mod),加速后续安装 |
两者的 -tags 用法、逻辑(与/或/非)、对代码的过滤规则完全相同。例如:
用标签区分 dev/prod 环境时:
# 本地编译一个dev版本的可执行文件(留在当前目录) go build -tags dev -o myapp-dev # 安装prod版本到全局路径(可直接在终端用myapp命令调用) go install -tags prod
- 若想临时编译一个可执行文件到当前目录(如测试),用
go build -tags <标签>;
- 若想将程序安装到全局路径方便长期使用,用
go install -tags <标签>;
- 两者的
-tags 作用完全一样,仅命令的输出位置和用途不同。
go build -tags <标签>;go install -tags <标签>;-tags 作用完全一样,仅命令的输出位置和用途不同。到此这篇关于go build -tags的其他用法的文章就介绍到这了,更多相关go build -tags用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- gin通过go build -tags实现json包切换及库分析
- go build -tags构建约束试验示例解析