假设我有一个基于哪个操作系统的go项目,在某些情况下是哪个发行版,我想使用Systemd客户端包对Upstart客户端包与sysv客户端包和launchd客户端包。是否有可能有选择地导入每个包,因此我只导入我构建的每个OS/发行版所需的包?还是我必须为每个OS/发行版导入每个包?
发布于 2016-03-08 00:23:38
包构建 构建约束 构建约束(也称为build标记)是一个开始的行注释。 // +构建 它列出了包中应包含文件的条件。约束可能出现在任何类型的源文件中(不仅仅是Go),但是它们必须出现在文件顶部附近,前面只有空行和其他行注释。这些规则意味着,在Go文件中,构建约束必须出现在package子句之前。 要将生成约束与包文档区分开来,必须在一系列生成约束后面加上一个空行。 build约束被计算为空格分隔选项的or;每个选项计算为其逗号分隔的术语的和;每个术语是字母数字词,或者,前面是它的否定词。也就是说,构建约束: // +构建linux,386达尔文,! 对应于布尔公式: (linux和386) OR (达尔文和(不是cgo)) 一个文件可能有多个构建约束。总体约束是单个约束的约束。也就是说,构建约束: // +构建linux达尔文/ +build 386 对应于布尔公式: (linux或达尔文)和386 在特定的构建过程中,满足以下单词:
使用构建约束。
使用包含多个文件的单个包。每个文件都专门针对特定的操作系统、体系结构等组合。
发布于 2021-06-10 20:02:42
构建约束被计算为空格分隔选项的or;每个选项计算为其逗号分隔术语的和;每个术语是字母数字单词或,前面有!
实际上,这将改变用Go 1.17 (Q3 2021)
//go:build线go命令现在理解//go:build行,并更喜欢它们而不是// +build行。 新的语法使用布尔表达式,就像Go一样,并且应该不容易出错。 在这个版本中,新语法得到了完全支持,所有Go文件都应该被更新,使其具有相同的含义。 为了帮助迁移,gofmt现在自动同步这两种表单。 有关语法和迁移计划的详细信息,请参阅https://golang.org/design/draft-gobuild。
在设计文件中:
该设计的核心思想是将当前用于构建标记选择的
// +build行替换为使用更熟悉的布尔表达式的新//go:build行。 例如,旧语法 // +构建linux / +build 386 将被新语法替换。 //go:构建linux && 386
https://stackoverflow.com/questions/35856693
复制相似问题