语法规则和构建约束
构建约束(也称为构建标记)用注释行表示,格式如下:
1 | // +build |
- 构建约束以一行
+build开始的注释。在+build之后列出了一些条件,在这些条件成立时,该文件应包含在编译的包中; - 约束可以出现在任何源文件中,不限于go文件;
+build必须出现在package语句之前,+build注释之后应要有一个空行。- 只允许字母数字或_
构建约束 多个选项之间空格分隔表示为OR,多个选项之间逗号分隔表示为AND。 每个选项都是一个字母数字的单词,或者以!开头表示否定。也就是说,构建约束:
1 | // +build linux,386 darwin,!cgo |
等同于:
1 | (linux AND 386) OR (darwin AND (NOT cgo)) |
一个文件可以包含多行构建约束。多行之间的约束表示为AND:
1 | // +build linux darwin |
等同于:
1 | (linux OR darwin) AND 386 |
以下单词支持特殊编译:
1 | - the target operating system, as spelled by runtime.GOOS |
除去文件扩展名和_test后缀,符合以下文件名称格式的也将纳入构建约束:
1 | *_GOOS |
GOOS和GOARCH表示为已知的操作系统和体系架构值,这类的文件被认为具有需要这些隐式构建约束。
让文件不被用于构建,任何其他不满意的词也会起作用,但“忽略”是符合传统的。
1 | // +build ignore |
更多详细信息,可以查看go/build/build.go文件中shouldBuild和match方法。参考:https://golang.org/pkg/go/build/