//go:build 和 // build 指令的区别
//go:build 指令是新的条件编译指令Go 1.17 中引入,旨在替换 // build 指令。虽然这两个指令都允许您指定文件应包含在包中的条件,但 //go:build 提供了几个关键改进:
-
一致性: // go:build 语法与其他现有的 Go 指令和编译指示一致,例如 //go:generate.
-
增强表达式: //go:build 支持标准布尔表达式(例如 //go:build foo && bar),而 // build 使用不太直观的 AND(逗号)和 OR(空格)语法。
-
代码格式: //go:build 指令由 gofmt 自动格式化。这可以避免常见错误,例如指令和包语句之间不留空行。
Go 1.18 提出 //go:build 作为首选指令,并计划逐步删除 // build线。两个指令之间的转换按如下方式处理:
- 在 Go 1.18 及更高版本中, //go:build 是主要构建约束指令。
- 如果文件缺少 // go:build 指令,任何 // build 指令仍然适用。
- 如果文件同时包含 //go:build 和 // build 指令, //go:build将被视为事实来源,gofmt 将更新 // 构建以匹配。
以上是Go 1.17 的 `//go:build`:它与条件编译的 `// build` 有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!