自定义带有构建标记的Go二进制文件

发布时间:2023年12月18日

引言

在Go中,构建标签或构建约束,是添加到代码片段中的标识符,用于确定在build过程中何时应将文件包含在包中。这允许您从相同的源代码构建不同版本的Go应用程序,并以快速和有组织的方式在它们之间切换。许多开发人员使用构建标记来改进构建跨平台兼容应用程序的工作流程,例如需要修改代码以适应不同操作系统之间的差异的程序。构建标记也用于集成测试,允许您在集成代码和带有mock服务或存根的代码之间快速切换,并用于应用程序中不同级别的功能集。

让我们以不同客户特性集的问题为例。在编写一些应用程序时,你可能希望控制二进制文件中包含哪些功能,例如提供免费专业企业级级别的应用程序。随着客户在这些应用程序中的订阅级别的提高,更多的功能变得解锁和可用。为了解决这个问题,你可以维护独立的项目,并通过使用import语句保持它们彼此同步。虽然这种方法是可行的,但随着时间的推移,它将变得乏味且容易出错。另一种方法是使用构建标签。

在本文中,您将使用Go中的build标记来生成不同的可执行二进制文件,这些二进制文件提供示例应用程序的免费、专业和企业特性集。每个版本都有一组不同的可用功能,免费版本是默认的。

前期准备

要学习本文中的示例,您需要:

  • 通过如何安装Go并设置本地编程环境来设置Go工作空间

构建免费版本

让我们从构建应用程序的免费版本开始,因为在不使用任何构建标签的情况下,它将是运行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

程序打印出了我们的两个免费功能,完成了我们应用程序的免费版本。

到目前为止,您创建了一个具有非常基本特性集的应用程序。接下来,我们将构建一种在构建时向应用程序

文章来源:https://blog.csdn.net/QIU176161650/article/details/134919928
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。