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使用的更多相关文章

  1. 最基础的 ant build 脚本

    最基础的 ant build 脚本,根据项目,自行进行修改 <?xml version="1.0" encoding="UTF-8" ?> < ...

  2. go build -tags 的使用

    go build 使用tag来实现编译不同的文件 go-tooling-workshop 中关于go build的讲解可以了解到go bulid的一些用法,这篇文章最后要求实现一个根据go bulid ...

  3. Android系统build.prop文件

    # begin build properties (开始设置系统性能) # autogenerated by buildinfo.sh (通过设置形成系统信息) ro.build.id=GRI40 ( ...

  4. Build类

    在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...

  5. build.prop修改详细说明

    用RE进入/system/挂载读写,找到build.prop复制到/sdcarrd进行修改比较保险.也可以挂载读写后,直接选择用文本编辑器打开,进行编辑.乱改有风险,修改需谨慎.1.# begin b ...

  6. android手机状态解释,比方android.os.Build.VERSION.SDK

    //BOARD 主板 String phoneInfo = "BOARD: " + android.os.Build.BOARD; phoneInfo += ", BOO ...

  7. android修改getprop读取到的ro.build.fingerprint属性

    在build/tools/buildinfo.sh中定义ro.build.fingerprint=$BUILD_FINGERPRINT. 然后在build/core/Makefile中给BUILD_F ...

  8. Android Rom build.prop文件详解

    # begin build properties   # autogenerated by buildinfo.sh   #以下内容由脚本在编译时自动产生 ro.build.id=6.7.7_97  ...

  9. [置顶] Android系统移植与调试之------->build.prop文件详细赏析

    小知识:什么是build.prop?   /system/build.prop 是一个属性文件,在Android系统中.prop文件很重要,记录了系统的设置和改变,类似於/etc中的文件.这个文件是如 ...

  10. Android Build.VERSION.SDK_INT兼容介绍

    尽管Android向下兼容不好,但是一个程序还是可以在多个平台上跑的.向下兼容不好,接口改变,新的平台上不能用旧的API,旧的平台更不可能用新的API,不等于一个平台需要一个APK.可以在高SDK上开 ...

随机推荐

  1. 震惊!C++程序真的从main开始吗?99%的程序员都答错了

    嘿,朋友们好啊!我是小康.今天咱们来聊一个看似简单,但实际上99%的C++程序员都答错的问题:C++程序真的是从main函数开始执行的吗? 如果你毫不犹豫地回答"是",那恭喜你,你 ...

  2. 如何基于大语言模型和MaxKB实现PPT自动生成方案

    一.实现方案 利用讯飞大模型智能 PPT 生成接口实现,具体参见:讯飞开放平台智能PPT生成 https://www.xfyun.cn/services/aippt#anchor4503211 二.新 ...

  3. Cordova基本使用(三)

    2021-10-10 Action 过了很久又需要打包了,今天补充下之前没有记录的一个问题:Android解决禁止使用http协议,如何解决 解决方法: Android解决禁止使用http协议的方案 ...

  4. Qt修改exe文件图标

    修改Qt生成exe的图标以及软件标题图标 目录 修改Qt生成exe的图标以及软件标题图标 简介 QtCreator下添加exe图标 直接添加.ico 通过.rc文件修改 Visual Studio下添 ...

  5. JMeter BeanShell 获取 HTTP Request 中的 Name

    场景:添加 JMeter log 输出,想输入自定义请求的名称 // 获取 response body prev.getResponseDataAsString(); // 获取 HTTP Reque ...

  6. JS处理数据四舍五入(tofixed与round的区别详解)

    1 .tofixed方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字.例如将数据Num保留2位小数,则表示为:toFixed(Num):但是其四舍五入的规则与数学中的规则 ...

  7. AIX操作系统基本命令

    1,内核 bootinfo -k   2,硬件 bootinfo -r lscfg |grep proc lspv lscfg   3,操作系统 oslevel -r oslevel -s uname ...

  8. docx4j转换HTML并生成word文档实践

    一.背景 在项目开发中,有一个需求需要将富文本编辑器中的内容转换为word文档.在网上看了很多开源第三方工具包的对比,最终选择了docx4j,主要原因有一下几点: 可以将html转换为word 对wo ...

  9. 在 CentOS 系统下搭建 ZeroTier Moon

    在 CentOS 系统下搭建 ZeroTier Moon 服务器时,生成的配置文件位置是在 /var/lib/zerotier-one/ 目录下.该目录包含了 ZeroTier One 的运行时数据, ...

  10. IP地址查询服务

    IP地址查询站点 https://ip.cn/ http://ip.qq.com/ http://ip138.com/ https://www.apnic.net/ ... IP计算 ip地址在线计算 ...