go build -tags的其他用法命令详解

 更新时间:2025年10月22日 15:02:50   作者:绛洞花主敏明  
go build -tags和go install -tags中的-tags 参数功能完全一致(都是通过标签控制编译哪些代码),核心区别在于 go build 和 go install 这两个命令本身的行为差异,而非 -tags的用法,本文介绍go build -tags的其他用法,感兴趣的朋友跟随小编一起看看吧

一、go build -tags用法?

1. 进阶逻辑用法(标签组合更灵活)

  • “与”逻辑:标签间用空格分隔,必须同时满足才编译
    代码标签://go:build linux && amd64(仅Linux+64位系统生效)
    编译命令:go build -tags "linux amd64"(必须同时传两个标签,才会包含这段代码)
  • “非”逻辑:用!排除标签,匹配“不含该标签”的代码
    代码标签://go:build !windows(除Windows外所有系统生效)
    编译命令:go build -tags "linux"(无需额外传!windows,只要标签不是windows就会包含)

2. 关联依赖/编译细节的冷门实用用法

控制标准库功能:通过标签启用标准库“隐藏功能”
例: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有什么区别?

go build -tagsgo install -tags 中的 -tags 参数功能完全一致(都是通过标签控制编译哪些代码),核心区别在于 go buildgo install 这两个命令本身的行为差异,而非 -tags 的用法。

1. 核心差异:命令本身的作用

维度go build -tags <标签>go install -tags <标签>
输出位置默认在当前目录生成可执行文件(可通过 -o 指定路径)固定安装到 $GOPATH/bin$GOBIN 目录(无需 -o,文件名固定为包名)
适用场景临时编译、本地测试(输出文件留在项目内)安装可执行程序到系统可执行路径(方便全局调用,如工具类程序)
对模块缓存的影响不影响,仅生成可执行文件会将编译结果缓存到模块缓存($GOPATH/pkg/mod),加速后续安装

2.-tags参数的一致性

两者的 -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用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解GoLang并发与并行

    深入理解GoLang并发与并行

    本文主要介绍了GoLang并发与并行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • golang连接mysql数据库操作使用示例

    golang连接mysql数据库操作使用示例

    这篇文章主要为大家介绍了golang连接mysql数据库操作使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • GoFrame ORM原生方法操作示例

    GoFrame ORM原生方法操作示例

    这篇文章主要为大家介绍了GoFrame ORM原生方法操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • go中new和make的区别小结

    go中new和make的区别小结

    new 只分配内存,make 用于初始化 slice、map 和 channel,本文详细的介绍了go中new和make的区别小结,感兴趣的可以了解一下
    2023-05-05
  • 在Go语言中实现DDD领域驱动设计实例探究

    在Go语言中实现DDD领域驱动设计实例探究

    本文将详细探讨在Go项目中实现DDD的核心概念、实践方法和实例代码,包括定义领域模型、创建仓库、实现服务层和应用层,旨在提供一份全面的Go DDD实施指南
    2024-01-01
  • 一文详解Go语言io.LimitedReader类型

    一文详解Go语言io.LimitedReader类型

    这篇文章主要为大家介绍了Go语言io.LimitedReader类型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Go语言中WaitGroup并发同步的实现

    Go语言中WaitGroup并发同步的实现

    本文主要介绍了Go语言中WaitGroup并发同步的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • Go归并排序算法的实现方法

    Go归并排序算法的实现方法

    归并排序采用的也是分治的策略,把原本的问题先分解成一些小问题进行求解,再把这些小问题各自的答案修整到一起得到原本问题的答案,从而达到分而治之的目的,对Go归并排序算法相关知识感兴趣的朋友一起看看吧
    2022-04-04
  • GO使用Mutex确保并发程序正确性详解

    GO使用Mutex确保并发程序正确性详解

    这篇文章主要为大家介绍了GO使用Mutex确保并发程序正确性详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go语言中init函数特点、用途和注意事项详解

    Go语言中init函数特点、用途和注意事项详解

    go语言中有一个非常神奇的函数init,它可以在所有程序执行开始前被执行,并且每个package下面可以存在多个init函数,这篇文章主要给大家介绍了关于Go语言中init函数特点、用途和注意事项的相关资料,需要的朋友可以参考下
    2023-07-07

最新评论