golang中的C风格条件编译

时间:2016-08-15 07:26:00

标签: go conditional-compilation

golang是否支持

#define DEBUG 

#ifdef DEBUG 
  fmt.Println("Debug message..."); 
#endif 

所以我可以构建一个零运行时开销的调试版本吗?

1 个答案:

答案 0 :(得分:3)

如果您在 linux Mac 上工作,则可以尝试“ m4 ”命令。该命令是宏< / strong>处理器正好适合这个问题。

在“进行构建”之前编写Makefile来运行m4命令可以与使用“进行构建-tags ...”相同,并且支持更多的自定义操作,并且当然可以保存您的工作。

例如:

在您的go文件(例如main.go)中写入这些文件:

define(DEBUG)
ifdef(`DEBUG',
    fmt.Println("Debug message..."); 
)

将这些内容写入您的Makefile文件中:

all:*.go
    mv main.go main.go.bak
    m4 main.go.bak > main.go
    go build
    mv main.go.bak main.go

然后运行“ make”。

缺点:

  1. 您无法编写名为“ define”或“ ifndef”等的go函数,该函数将被m4转换为Macro。
  2. 如果文件太多,则可能需要改善Makefile。
  3. 您可能想学习m4,这有点困难和复杂。