Go语言提供的build tag 条件编译特性,顾名思义,只有在特定条件下才会构建对应的代码。

比如下面的源文件只有在设置debug构建标志时才会被构建:

// +build debugpackage mainvar buildMode = "debug"

可以用以下命令构建:

go build -tags="debug"
go build -tags="windows debug"

关于tags的说明:

  • 构建约束以一行+build开始的注释。在+build之后列出了一些条件,在这些条件成立时,该文件应包含在编译的包中;
  • 约束可以出现在任何源文件中,不限于go文件;
  • +build必须出现在package语句之前,+build注释之后应要有一个空行。
  • 多个条件之间,空格表示OR;逗号表示AND;叹号(!)表示NOT
  • 一个文件可以有多个+build,它们之间的关系是AND。

例如:

我们可以通过-tags命令行参数同时指定多个build标志,它们之间用空格分隔。

当有多个build tag时,我们将多个标志通过逻辑操作的规则来组合使用。比如以下的构建标志表示只有在”linux/386“或”darwin平台下非cgo环境“才进行构建。

// +build linux,386 darwin,!cgo
// +build windows

其中linux,386中linux和386用逗号连接表示AND的意思;

linux,386darwin,!cgo之间通过空白分割来表示OR的意思;

两行语句表示AND。

tags 应用场景:

不同环境下编译不同的文件,实现版本控制 、 环境配置控制等。

例如:项目中有如下文件代表不同的运行环境,通过 tag 控制不同环境下要编译的文件

dev.go

// +build devpackage mainimport "fmt"var version = "dev"func main() {fmt.Printf("running %s version", version)
}

release.go

// +build releasepackage mainimport "fmt"var version = "release"func main() {fmt.Printf("running %s version", version)
}

编译时通过指定不同的标签来编译不同文件:

编译 dev 环境

go build -tags="dev" 

编译 release 环境

go build -tags="release"

来思Go,Let's Go!欢迎留言交流学习!

go build 参数_Go语言 通过go bulid -tags 实现编译控制相关推荐

  1. go post 参数_go语言使用Swaggo详细教程

    相信很多程序猿和我一样不喜欢写API文档.写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全.但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至能让前后端人员打起来 ...

  2. $emit传递多个参数_Go语言参数传递方式

    一.函数参数传递方式 函数参数传递有2种方式:值传递和引用传递. 值传递是指调用函数时将参数值复制一份到函数,如果对函数参数进行修改,影响不到实际参数. 引用传递是指调用函数时将参数的指针传递到函数中 ...

  3. go post 参数_go语言实现网易云音乐爬虫

    前言 最近在学习go,学习一门语言最好的方式就是实践,之前学习python也是从爬虫入手,现在使用go语言写一个网易云音乐的爬虫,下面会简单介绍开发的过程,代码是初学者的水平,欢迎吐槽. 本项目git ...

  4. cmd编译可以通过执行没有结果_Go语言是如何完成编译的

    Go语言是一门需要编译才能运行的编程语言,也就说代码在运行之前需要通过编译器生成二进制机器码,随后二进制文件才能在目标机器上运行,如果我们想要了解Go语言的实现原理,理解它的编译过程就是一个没有办法绕 ...

  5. go build 无文件_GO笔记之详解GO的编译执行流程

    上篇文章介绍了Golang在不同系统下的安装,并完成了经典的Hello World案例.在这个过程中,我们用到了go run命令,它完成源码从编译到执行的整个过程. 今天来详细介绍下这个过程.简单理解 ...

  6. go channel 缓冲区最大限制_Go语言11周年,泛型问题有望明年得到解决

    作者 | 田晓旭.万佳 近日,Go 团队发布长篇博文庆祝 Go 语言开源 11 周年. Go 团队在博文写道,"回想 Go 语言十周年庆典恍如隔世.虽然 2020 年有诸多艰难,但我们一直在 ...

  7. C语言 函数不定长参数 - C语言零基础入门教程

    目录 一.前言 二.函数不定长参数简介 1.va_start 2.va_arg 3.va_end 三.自定义不定长参数的函数 1.va_start/va_arg/va_end 案例一 2.va_sta ...

  8. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  9. go语言视频教程_ go语言入门视频教程_go语言实战视频教程

    许多人可能知道go语言的优点在哪里,但他们不知道go语言适合在哪里使用.通过学习go语言视频教程,可以清楚的知道go语言主要用于服务器端开发,其定位是用来开发"大型软件".学习go ...

最新文章

  1. 2018.06.28 与或(线段树)
  2. OpenCV 获取并修改图中的像素点
  3. 非此即彼的逻辑错误_辩证思维与逻辑思维相对立
  4. Bit-Z 关于交易隐藏及下线说明
  5. 值更新事件(触发带基础属性到指定字段)
  6. pandas 季度_pandas_时间序列和常用操作
  7. ffmpeg 新老接口问题及对照集锦
  8. LeetCode 397. 整数替换(递归 贪心)
  9. 【Linux】Aria2 一键安装管理脚本 BT\PT一键安装包
  10. Maven--部署构件至 Nexus
  11. IOT(7)---物联网平台架构设计
  12. 机器学习6/100天-Logistic实践
  13. TypeScript入门学习笔记
  14. php 开源邮件系统,企业级开源邮件系统搭建的全过程
  15. linux mint17kde 安装教程,Kubuntu 14.04 /Linux Mint 17 怎样安装 KDE 4.14.1
  16. Python 高级编程笔记之测试驱动开发
  17. Matlab中clc;clear;clear all;clf;close;close all作用
  18. HTML5 第004篇 <abbr>标签【定义缩写】
  19. 在maven中创建jsp依赖
  20. 36Kr皇包车-第1个投资退出案例

热门文章

  1. 160-PHP 文本替换函数str_replace(一)
  2. 【汇编语言】——第三章课后总结
  3. 验证码何时可以退出历史舞台?
  4. hdu_1861_游船出租_201402282130
  5. 分享45套2011年和2012年的高质量免费网站模板
  6. 《从零开始学习ASP.NET MVC 1.0》-开天辟地入门篇
  7. JS一维数组转化为三维数组有这个方法就够了
  8. 怎么解决eclipse报PermGen space异常的问题
  9. node --- http数据上传
  10. Android源码编译全过程记录(基于最新安卓5.1.0)【转】