当前位置: 首页 > 工具软件 > Go Debug > 使用案例 >

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

涂煌
2023-12-01

项目中,很容易遇到一个问题,希望项目代码在开发调试过程中能更多的输出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 语言高性能编程 | 极客兔兔

 类似资料: