在Go中,构建标签或构建约束,是添加到代码片段中的标识符,用于确定在build
过程中何时应将文件包含在包中。这允许您从相同的源代码构建不同版本的Go应用程序,并以快速和有组织的方式在它们之间切换。许多开发人员使用构建标记来改进构建跨平台兼容应用程序的工作流程,例如需要修改代码以适应不同操作系统之间的差异的程序。构建标记也用于集成测试,允许您在集成代码和带有mock服务或存根的代码之间快速切换,并用于应用程序中不同级别的功能集。
让我们以不同客户特性集的问题为例。在编写一些应用程序时,你可能希望控制二进制文件中包含哪些功能,例如提供免费、专业和企业级级别的应用程序。随着客户在这些应用程序中的订阅级别的提高,更多的功能变得解锁和可用。为了解决这个问题,你可以维护独立的项目,并通过使用import
语句保持它们彼此同步。虽然这种方法是可行的,但随着时间的推移,它将变得乏味且容易出错。另一种方法是使用构建标签。
在本文中,您将使用Go中的build标记来生成不同的可执行二进制文件,这些二进制文件提供示例应用程序的免费、专业和企业特性集。每个版本都有一组不同的可用功能,免费版本是默认的。
要学习本文中的示例,您需要:
让我们从构建应用程序的免费版本开始,因为在不使用任何构建标签的情况下,它将是运行go build
的默认值。稍后,我们将使用构建标签有选择地将其他部分添加到程序中。
在src
目录下,创建一个以你的应用程序命名的文件夹。本教程将使用app
:
mkdir app
进入到这个文件夹:
cd app
接下来,在你选择的文本编辑器中创建一个新的文本文件,名为main.go
:
nano main.go
现在,我们将定义应用程序的免费版本。在main.go
中添加以下内容:
main.go
package main
import "fmt"
var features = []string{
"Free Feature #1",
"Free Feature #2",
}
func main() {
for _, f := range features {
fmt.Println(">", f)
}
}
在这个文件中,我们创建了一个程序,它声明了一个名为features
的[切片],它包含两个[字符串],代表我们免费应用程序的特征。应用程序中的main()
函数使用[for
循环来遍历features
切片,并将所有可用的功能打印到屏幕上。
保存并退出文件。现在这个文件已经保存,在本文的其余部分中,我们将不再需要编辑它。相反,我们将使用构建标签来更改我们将从中构建的二进制文件的功能。
构建并运行程序:
go build
./app
你将收到以下输出:
Output> Free Feature #1
> Free Feature #2
程序打印出了我们的两个免费功能,完成了我们应用程序的免费版本。
到目前为止,您创建了一个具有非常基本特性集的应用程序。接下来,我们将构建一种在构建时向应用程序