在Golang中是否存在类似于宏的用于调试的功能?

huangapple go评论83阅读模式
英文:

Does there exists something like Macros in Golang for debugging

问题

在Go语言中,没有像C/C++中的宏那样的机制。但是,你可以使用条件编译和构建标记来实现类似的效果。在调试阶段,你可以使用构建标记来启用调试信息的打印,而在正式发布时,可以禁用这些构建标记,以便调试信息不会被编译和打印出来。下面是一个示例:

func demo() {
    // ...
    // 在调试阶段,下面的代码会被编译并打印调试信息
    #ifdef DEBUG
    printMyDebugInfo(variable)
    #endif
    // ...
}

请注意,Go语言中没有预处理器,因此不能像C/C++那样直接使用宏。但是,通过使用构建标记和条件编译,你可以实现类似的效果。

英文:

Does there exist also something like macros of C/C++ in golang so that in debug phase, developers are allowed to print some additional debug information? And in the official release, just set these macros to false so that they will not be compiled and no extra information will be printed. Here is a snippet to illustrate what I mean.

func demo() {
    // ...
    // the following line will not be compiled in release only in debug phase
    
    printMyDebugInfo(variable)
    
    // ...
}

答案1

得分: 3

最接近的方法可能是定义一个具有两个版本的调试打印函数。

一个用于调试模式:

//go:build debug

package whatever

func debugPrint(in string) {
    print(in)
}

一个用于生产环境:

//go:build !debug

package whatever

func debugPrint(in string) {}

当你想使用调试版本时,使用go build -tags debug

英文:

The closest is probably to define a debug print function in two versions.

One for debug mode:

//go:build debug

package whatever

func debugPrint(in string) {
    print(in)
}

One for production:

//go:build !debug

package whatever

func debugPrint(in string) {}

Then use go build -tags debug when you want to use the debug version.

huangapple
  • 本文由 发表于 2022年3月9日 22:50:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/71411238.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定