Golang的条件编译参数-tags解决项目的debug模式

项目中,很容易遇到一个问题,希望项目代码在开发调试过程中能更多的输出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    // 没有输出

参考:Go 死码消除与调试(debug)模式 | Go 语言高性能编程 | 极客兔兔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值