您的位置 首页 golang

提了 3 年,Go1.17 终于增强构建约束

Go 1.17rc1在前几天正式发布:

时隔三年,GO1.17终于增加了新特性,是面向Go构建的时候构建约束增强。

很多人初学或者使用Go语言的时候压根不知道Go有个约束语法,以为只是个注释问题。其实Go语言在不同的编译环境要写不同的Go代码,所以需要构建约束。Go语言针对这一问题的解决方案是在文件层面进行有条件的编译,要么每个文件在编译中要么就不在。

构建约束(build constraint),也叫做构建标记(build tag),是在 Go 源文件最开始的注释行,比如:

 // +build linux
  

看到这个,相信很多人都不陌生,因为这是 Go 一开始就有的特性,在 Go 源码中有很多这样的注释行。上面注释行的意思,这个文件只在 Linux 系统会包含在包中,其他系统会忽略这个文件。

几个注意点:

  • 约束可以出现在任何源文件中,比如 .go、.s 等;
  • 必须在文件顶部附近,它的前面只能有空行或其他注释行;可见包子狗也在约束之后;
  • 约束可以有多行;
  • 为了区别约束和包文档,在约束之后必须有空行;

针对某个构建约束,可使用的词如下:

  • 特定操作系统,对应 runtime.GOOS 的可用值,比如 linux、windows 等;
  • 特定的架构,对应 runtime.GOARCH 的可用值,比如 386、amd64 等;
  • 使用的编译器,比如 gc、gccgo;
  • 支持 cgo 命令时,可以使用 cgo;
  • Go 的主要发布版本,比如 go1.17、go1.16 等;(测试版本和 fixbug 版本不支持)
  • 自定义的 tag,编译时通过 -tags 传递的值;
  • 可以加入任意值,一般用 ignore 来忽略构建;

此外,文件名可以通过 GOOS 和 GOARCH 来做构建约束。

文章来源:智云一二三科技

文章标题:提了 3 年,Go1.17 终于增强构建约束

文章地址:https://www.zhihuclub.com/97701.shtml

关于作者: 智云科技

热门文章

网站地图