Go 1.14版本下如何将多个Golang build tags拆分为多行书写?
错误原因说明
你使用的反斜杠续行写法不被Go 1.14的// +build构建约束语法支持,Go的构建约束解析器不会识别反斜杠作为续行符,因此该写法无法生效。
正确拆分规则
Go 1.14的// +build语法遵循以下固定规则:
- 同一行内用空格分隔的tag为或关系,只要满足其中一个就匹配该行规则
- 多个
// +build行之间为与关系,需要所有行的规则都满足才会匹配 - 所有
// +build指令必须放在文件顶部,和package声明之间至少保留一行空行,且//和+build之间不能插入其他内容
场景1:拆分后保持所有tag为或关系(和原单行写法逻辑一致)
如果你的原需求是只要指定任意一个tag就匹配,由于旧语法不支持多行或关系,你可以选择以下两种方案:
- 保持所有tag在同一行:Go工具链对单行长度没有强制限制,可读性影响不大的情况下可以直接沿用原单行写法
- 按tag分类拆分,用逻辑等价的多行写法实现,比如按公共标识、权限类型、存储组件分组后调整逻辑:
// 匹配逻辑:带integration公共tag + 任意权限tag + 任意功能/存储tag // +build integration // +build integration_auth_pwd integration_auth_tls // +build integration_config integration_groups integration_groups_mongodb integration_groups_sql integration_groups_cassandra
场景2:拆分后多行是与关系
如果你的业务逻辑本来就需要多个类型的tag同时满足才编译,直接拆分多行即可:
// +build integration integration_auth_pwd integration_auth_tls // +build integration_config integration_groups // +build integration_groups_mongodb integration_groups_sql integration_groups_cassandra
补充说明
如果你后续升级到Go 1.17及以上版本,可以使用官方推出的新构建约束语法//go:build,该语法原生支持括号、逻辑运算符和换行,可读性更强,也能直接实现多行或关系的拆分。
内容的提问来源于stack exchange,提问作者Doru Popescu
相关产品推荐
相关产品推荐

