go-条件编译

这是常用操作,数据库的相关配置信息,debug 和 release 下面的配置信息是不同的。
还有其他不一样的信息。可以通过条件编译来实现。

初步调研了一下有两种方式:

通过ldflags设置变量

这个方式是通过编译参数来设置初始变量的值。

go build -ldflags "-X main.VERSION=1.0.0 -X 'main.BUILD_TIME=`date`' -X 'main.GO_VERSION=`go version`'"

引用环境变量的方式:
export TAG=v1.b.50
go build -ldflags "-X main.version='$TAG' -X main.conf=release"

“包名.变量名” 的形式
package main
...
var version = "unknown"
var conf string
...

goland设置参考如下:
dfb87b15.png

通过-tags的方式

这个目前还没好用,不知道问题在哪里,空行也有了,但是还是提示重复声明 redeclared in this block

类似编译宏定义。

在文件的第一行,注意和 package 之间有个空行。下面表示支持在 osx linux 下面编译

// +build darwin linux !debug

package main

go build -tags "debug"