当前位置: 首页 > news >正文

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 作用完全一样,仅命令的输出位置和用途不同。
http://www.dtcms.com/a/511572.html

相关文章:

  • 【Unity开发】try-finally 与 try-catch 的区别详解
  • PHP数据库操作全攻略
  • 标准解读——GB/T 46353—2025《信息技术 大数据 数据资产价值评估》国家标准
  • Herm详解
  • 重庆网站建设哪家公司那家好winserver2008上用iis发布网站
  • HTML-CSS项目练习
  • 如何编写自动化测试用例?
  • 【Vibe Coding】001-前端界面常用布局
  • webview 中 cursor:pointer无效是由于-webkit-app-region导致的
  • 【C++】哈希表的实现【开放定址法vs链地址法】
  • 【业务逻辑漏洞】认证漏洞
  • 做网站在哪深圳做网站 汉狮网络
  • 修改k8s的镜像源为国内镜像源
  • Arbess从入门到实战(15) - 使用Arbess+GitHub实现Docker项目自动化构建部署
  • 【MySQL】从零开始了解数据库开发 ---mysql事务机制(一)
  • 网站建设明细盐都建设局网站
  • 基于单片机的气象站labview上位机监测系统
  • Chainlit+LlamaIndex 多模态 RAG 开发实战7:从系统架构到功能落地,搞定 PDF/PPT/ 图片全类型文件处理
  • 在VScode中将一个分支的某一次提交合并到另一个分支中
  • MAC M芯片安装配置VMware+Ubuntu
  • 免费seo推广软件网站排名优化软件联系方式
  • Nebula全球私有云网络部署与配置综合指南
  • LeetCode刷题总结
  • 阿里云代理商:如何开通阿里云文件存储?
  • gitee与github远程仓库
  • C语言需要掌握的基础知识点之字符串
  • 网站子页面如何做seo国家高新技术企业管理工作网
  • vs2010 iis 网站开发有没有什么需要推广的平台
  • 第六章 图——课后习题解练【数据结构(c语言版 第2版)】
  • 小米 C++ 校招二面:epoll/poll/select 区别与底层实现解析