Go基础0x02-go build -tags使用
Go语言提供的build -tags
条件编译特性,顾名思义,只有在特定条件下才会构建对应的代码。
本文实现一个根据go bulid -tags
功能来编译不同版本的做法,version参数根据tags传进来的值进行编译。
main.go
package main
import "fmt"
// HINT: You might need to move this declaration to a different file.
// const version = "dev"
func main() {
fmt.Printf("running %s version", version)
}
dev_config.go
// +build dev
package main
var version = "DEV"
上面代码的关键是// +build dev
这行代码,注意这行代码前后须有一个空行隔开,例如该代码出现在第一行时,则接下来要空出一行。
另外,这个文件只会被go bulid
识别到,而go run
等命令不会去识别这个文件。
release_config.go
// +build release
package main
const version = "RELEASE"
代码已经准备完毕,还有一个地方要注意,需要注释掉main.go
中的const version = 'dev'
这行代码,否则,go bulid
命令会报version重复定义。
go build -tags测试
执行命令如下:
$ go build -tags dev -o dev_version
$ ./dev_version
running DEV version
$ go build -tags release -o release_version
$ ./release_version
running RELEASE version
go build -ldflags
go build
还支持通过命令行传递编译参数,通过-ldflags
参数实现。
$ go build -ldflags '-X main.version="dev"' -o dev_version
$ ./dev_version
running "dev" version
关于tags的补充说明
- 构建约束以一行+build开始的注释。在+build之后列出了一些条件,在这些条件成立时,该文件应包含在编译的包中;
- 约束可以出现在任何源文件中,不限于go文件;
- +build必须出现在package语句之前,+build注释之后应要有一个空行;
- 多个条件之间,空格表示OR;逗号表示AND;叹号(!)表示NOT;
- 一个文件可以有多个+build,它们之间的关系是AND。
参考
[1]https://www.cnblogs.com/linyihai/p/10859945.html
[2]https://zhuanlan.zhihu.com/p/269746831
(全文完)
更多关于大数据、分布式、存储、区块链、Linux相关文章请关注微信公众号:asympTech渐进线实验室
Github、知乎、博客园、CSDN、简书全网唯一id:JasonCeng
技术人,不白嫖,如果您觉得文章对您有帮助,帮忙点个推荐吧~
Go基础0x02-go build -tags使用的更多相关文章
- 最基础的 ant build 脚本
最基础的 ant build 脚本,根据项目,自行进行修改 <?xml version="1.0" encoding="UTF-8" ?> < ...
- go build -tags 的使用
go build 使用tag来实现编译不同的文件 go-tooling-workshop 中关于go build的讲解可以了解到go bulid的一些用法,这篇文章最后要求实现一个根据go bulid ...
- Android系统build.prop文件
# begin build properties (开始设置系统性能) # autogenerated by buildinfo.sh (通过设置形成系统信息) ro.build.id=GRI40 ( ...
- Build类
在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...
- build.prop修改详细说明
用RE进入/system/挂载读写,找到build.prop复制到/sdcarrd进行修改比较保险.也可以挂载读写后,直接选择用文本编辑器打开,进行编辑.乱改有风险,修改需谨慎.1.# begin b ...
- android手机状态解释,比方android.os.Build.VERSION.SDK
//BOARD 主板 String phoneInfo = "BOARD: " + android.os.Build.BOARD; phoneInfo += ", BOO ...
- android修改getprop读取到的ro.build.fingerprint属性
在build/tools/buildinfo.sh中定义ro.build.fingerprint=$BUILD_FINGERPRINT. 然后在build/core/Makefile中给BUILD_F ...
- Android Rom build.prop文件详解
# begin build properties # autogenerated by buildinfo.sh #以下内容由脚本在编译时自动产生 ro.build.id=6.7.7_97 ...
- [置顶] Android系统移植与调试之------->build.prop文件详细赏析
小知识:什么是build.prop? /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如 ...
- Android Build.VERSION.SDK_INT兼容介绍
尽管Android向下兼容不好,但是一个程序还是可以在多个平台上跑的.向下兼容不好,接口改变,新的平台上不能用旧的API,旧的平台更不可能用新的API,不等于一个平台需要一个APK.可以在高SDK上开 ...
随机推荐
- Keil中设置显示空白符,并将Tab键使用4个空格代替
前言 Keil 的默认设置是没有将 Tab 键使用空格代替的,不同的文本编辑器对 Tab 键所占的空格数不同,有占 2 个空格的,也有占 4 个空格的,这就导致同样的代码在不同的编辑器中缩进不同,虽不 ...
- go time时间格式化
时间戳与时间格式相互转化 例一 // 时间戳转时间 str_time := time.Unix(1617279282,0).Format("2006-01-02 15:04:05" ...
- vue学习二(计算属性computed和监听器watch)
1.1.computed 计算属性 先写注意事项把:computed和methods的区别 //computed定义的方法我们是以属性访问的形式调用的{{computedTest}} comp ...
- bp靶场业务逻辑漏洞
修改商品价格 目标是修改价格后低价买下这件夹克,再home这个页面的第一个商品就是 点击Add to cart,抓包,发现price的值可以该,改成000发现不行,0.00也不行,改成10后发现购物车 ...
- oracle审计详解
Oracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这些权限,但可以提供有用的信息,用于揭示权限的滥用和误用. 下表中总结了Oracle数据库中不同类型的审计. 审 ...
- zk基础—1.一致性原理和算法
大纲 1.分布式系统特点 2.分布式系统的理论 3.两阶段提交Two-Phase Commit(2PC) 4.三阶段提交Three-Phase Commit(3PC) 5.Paxos岛的故事来对应Zo ...
- mybatis数据的批量插入
1:xml的配置 <insert id="insertUserBatch"> insert into user(username, birthday, sex, add ...
- Robot Framework全局变量设置
脚本在每次执行的时候,自定义输入的内容,每次均需要手动去修改 比如,添加商品,上一次执行设置的商品名称为"商品1",这次再执行"商品1"就会导致冲突 如果仅仅是 ...
- Reactjs之Vue用户0基础上手Reactjs笔记
Reactjs之Vue用户0基础上手Reactjs笔记 - 搜栈网 (seekstack.cn)https://www.seekstack.cn/post/382
- 基于Java Swing开发好看的皮肤
先介绍几款开源及商业的皮肤. Weblaf:非常赞的套件,界面现代.简约.依赖包较少. 有开源也有商业协议,个人最喜欢的皮肤.https://github.com/mgarin/weblaf PgsL ...