Go中没有文本预处理。像Java和其他类似的人一样,如果我想删除一段代码,我可以使用const
值并用if
包围代码。
如果我这样做,编译器是否会优化AST中的代码并生成代码?或者每次都执行条件?
编辑:如果我想复制#ifdef
什么是最好的方法呢?
答案 0 :(得分:8)
如果具有常量条件的语句与#ifdef
不同,因为无论如何都会编译内部代码。但是,编译器会在可能的情况下对其进行优化。考虑一下这个程序:
package main
import (
"fmt"
)
func main() {
if false {
fmt.Println("Hello, world!")
}
}
如果我们运行go tool 6g -S test.go
,这是main
函数的汇编输出:
--- prog list "main" ---
0000 (test.go:7) TEXT main+0(SB),$40-0
0001 (test.go:11) RET ,
死代码消失了,所以它只是返回。
如果您确实需要实际有条件地编译部分代码,最好通过构建系统来完成。