Build Constraints(构建约束),也称为 build tag,是以 // +build 开头的行注释。
// +build
构建约束 列出了一个文件被包含到包里的一些条件,它可以出现在任意的源码文件中,不仅仅是 .go 文件。
但它们写在文件的顶部,后跟空行和其它注释。这也意味着在 .go 文件中构建约束必须写在 package 语句之前。
为了区别构建约束与包文档,构建约束之后必须跟着一个空行。
构建约束以空格分隔每个选项,它们互为“或”关系;每个选项以逗号分隔,它们互为“且”关系。
比如:
// +build linxu,386 darwin,!cgo
等价于:
(linux AND 386) OR (darwin AND (NOT cgo))
一个文件可以包含多个构建约束,它们之间互为“且”关系。
比如:
// +build linux darwin // +build 386
等价于:
(linux OR darwin) AND 386
在一个特定构建中,可以使用的约束关键词有:
- 目标操作系统:runtime.GOOS
- 目标架构:runtime.GOARCH
- 编译器:gc 或者 gccgo
- cgo: 如果 ctxt.CgoEnabled 设为 True
- go1.1, go1.2 ...
- ctxt.BuildTags 中列出的关键词
如果一个文件名去掉扩展和 _test 后缀,符合:
- *_GOOS
- *_GOARCH
- *_GOOS_GOARCH
比如:source_windows_amd64.go,那么这个文件也相当于是隐式的构建约束。
如果要将一个文件从构建中排除,可以使用:
// +build ignore
事实上,只要使用非构建约束关键词都可以,只不过 ignore 更加直观。
Add Comment