项目中,很容易遇到一个问题,希望项目代码在开发调试过程中能更多的输出debug日志信息,但是项目上线时的release版本是不包含debug部分的,比如:
package main
const debug = true
func main() {
if debug {
fmt.Println("here is debug info, should not be seen online")
}
}
一个很通用的做法就是搞一个config.go,将debug的常量定义独立到该文件中,然后在项目git的develop分支上定义的是 const debug = true,而release分支上定义的是 const debug = false,这样开发时在develop分支上就有debug信息,而release分支上打包则不包含debug
坏处也很明显,develop / release 这2个分支上的config.go内容是不一致的
但是golang有一个更优的方式来实现这个需求,那就是 go build -tags 编译参数
我们新建2个配置文件
dev_config.go:
// +build debug
package main
const debug = true
release_config.go:
// +build !debug
pakcage main
const debug = false
// +build debug
表示 build tags 中包含 debug 时,该源文件参与编译。// +build !debug
表示 build tags 中不包含 debug 时,该源文件参与编译
接下来我们用不同的编译参数来验证 dev_config.go 和 release_config.go 只会有条件的选择其中之一参与编译
go build -tags debug -o debug .
./debug // 输出 here is debug info, should not be seen online
go build -o release .
./release // 没有输出