Golang有条件编译

在Go 1中,我有条件编译的麻烦。

这是我的testing代码。 有什么我误解了“+ +构build”约束和“标签”标志?

main1.go

// +build main1 package main import ( "fmt" ) func main() { fmt.Println("This is main 1") } 

main2.go

 // +build main2 package main import ( "fmt" ) func main() { fmt.Println("This is main 2") } 

当运行“去build立”,我仍然有编译错误

 $ go build -tags 'main1' # test ./main2.go:8: main redeclared in this block previous declaration at ./main1.go:8 

您必须按照// +build XXX生成一个空行的// +build XXX

在我的简短search中,我无法find/如果这是logging。 但是消息来源明确地说出来了

对,你必须留下一个空行,不是完全在// +build XXX而是在package main之前,因为在声明包的行之前的所有注释行都被认为是包的描述并由godocparsing。

包构build

构build约束

构build约束是一个以+build指令开始的行注释,列出了文件应该包含在包中的条件。 约束可能出现在任何types的源文件中(不仅仅是Go),但是它们必须出现在文件的顶部附近,仅由空行和其他行注释开头。

为了将构build约束与包文档区分开来,一系列的构build约束必须在后面加一个空行。

在构build约束之后添加一个空行。 例如,

 // +build main1 package main import ( "fmt" ) func main() { fmt.Println("This is main 1") }