Page tree
Skip to end of metadata
Go to start of metadata

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 更加直观。


  • No labels
Write a comment...