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

引言

在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 mainimport "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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算能 MilkV Duo开发板实战——opencv-mobile (迷你版opencv库)的移植和应用

前言 OpenCV是一种开源的计算机视觉和机器学习软件库,旨在提供一组通用的计算机视觉工具。它用于图像处理、目标识别、人脸识别、机器学习等领域,广泛应用于计算机视觉任务。 OpenCV-Mobile是OpenCV库的轻量版本,专为移动平台(A…

学习 NVIDIA Omniverse 的最基础概念

无用的前言 近两年关于 Omniverse 的宣传一直很多,可我一直没去了解,连它是个啥都不知道。最近正好有契机需要了解它,于是我今天抽时间看了些它的官方介绍,并按照自己的理解梳理在这里。 官方资料索引 Omniverse 官网主页&…

Nacos配置管理-微服务配置拉取

yaml已配置内容 目录 一、配置获取步骤 二、统一配置管理步骤 三、Nacos管理配置的步骤总结 一、配置获取步骤 二、统一配置管理步骤 1、引入Nacos的配置管理客户端依赖: <!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud&l…

CRM是什么?企业为什么需要CRM?

CRM是什么 CRM的全称是Customer Relationship Management&#xff0c;即客户关系管理&#xff0c;是一种企业与现有客户及潜在客户之间关系互动的管理系统&#xff0c;是企业“以客户为中心”价值观的核心体现之一。 客户是一家企业最宝贵的资源。CRM系统最关键的就是能够帮助…

复亚智能无人机机场适配最新大疆无人机

无人机已经在各个领域得到广泛应用&#xff0c;但由于操作难度、起降场地等问题&#xff0c;其应用范围和效率受到了一定限制。随着无人机机场研发技术的成熟&#xff0c;许多实际操作中的难题得以解决&#xff0c;使得无人机应用变得更加高效。接下来&#xff0c;我们将深入了…

修改代码后idea如何将代码提交到公司git上

1、需要先更新最新的代码到本地&#xff1b;&#xff08;此步骤防止&#xff0c;公司其他人在此期间已经提交了最新代码&#xff0c;但是自己本地项目没有拉取最新代码&#xff0c;导致最后版本冲突&#xff09; 打开idea---》鼠标项目项目名上右击---》选择Git---》选择pull-…

MySQL数据库,创建和管理表

创建数据库&#xff1a; 方式一&#xff1a;创建数据库 CREATE DATABASE 数据库名&#xff1b;&#xff08;使用的是默认的字符集&#xff09; 方式二&#xff1a;创建数据库并指定字符集 CREATE DATABASE 数据库名 CHARACTER SET 字符集&#xff1b; 方式三&#xff1a;判断数…

边车模式的介绍

边车模式也叫搭档模式。 边车模式的设计思想是将控制和逻辑分离&#xff0c;常用于分布式架构中的逻辑和控制分离设计。边车来实现这些与业务逻辑没有关系的控制功能。 以边车的方式&#xff0c;对应用服务没有侵入性&#xff0c;并且不用受到应用服务的语言与技术的限制&…

每天五分钟计算机视觉:使用1*1卷积层来改变输入层的通道数量

本文重点 在卷积神经网络中有很多重要的卷积核&#xff0c;比如1*1的卷积核&#xff0c;3*3的卷积核&#xff0c;本文将讲解1*1的卷积核的使用&#xff0c;它在卷积神经网络中具有重要的地位。由于1*1的卷积核使用了最小的窗口&#xff0c;那么1*1的卷积核就失去了卷积层可以识…

调试备忘录-NTC电阻的使用(教程 + 代码)

软件环境&#xff1a;CodeWarrior 11.1 硬件环境&#xff1a;NXP S9KEAZ64A 传感器参数&#xff1a;NTC热敏电阻(R25 50k,B25-50 3950) 写在前面 最近做小项目需要用到NTC电阻&#xff0c;因此写一个调试备忘录记录下。 什么是NTC电阻&#xff1f; NTC热敏电阻就是负温度…

【flink番外篇】2、flink的23种算子window join 和interval join 数据倾斜、分区介绍及详细示例-完整版

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

npm install报错ERR code ETIMEDOUT的解决办法

//1.查看npm镜像设置 npm config get registry //2.将npm设置为淘宝镜像 npm config set registry https://registry.npm.taobao.org //3.再次查看npm镜像设置 npm config get registry //4.重新install npm install要查看npm源&#xff0c;可以使用以下命令&#xff1a; 1. 查…

行人重识别paper汇总

文章目录 2021Learning Generalisable Omni-Scale Representations for Person Re-Identification 参考 2021 Learning Generalisable Omni-Scale Representations for Person Re-Identification code: https://github.com/KaiyangZhou/deep-person-reid 摘要&#xff1a;一…

GLAB | CCNA+HCIA=融合课-最新开课通知

敲重点! 12月17日 CCNAHCIA 周日开课啦&#xff01; CCNA&#xff08;Cisco Certified Network Associate&#xff09;认证是Cisco售后工程师认证体系的入门认证&#xff0c;也是Cisco各项认证中级别最低的技术认证通过CCNA认证可证明你已掌握网络的基本知识&#xff0c;并能…

TypeScript入门实战笔记 -- 01 如何快速搭建 TypeScript 学习开发环境?

&#x1f34d;IDE for TypeScript 在搭建 TypeScript 环境之前&#xff0c;我们需要先认识几款适合 TypeScript 的 IDE。只有这样&#xff0c;在开发时我们才能根据实际情况选择合适的 IDE 进行安装&#xff0c;从而提升工作效率。 VS Code Visual Studio Code&#xff08;VS C…

public static final

常量对象中声明并赋值的正确写法一&#xff1a; public class RoleConstant {public static final List<String> PROBLEM_VIEW_ALL_DATA new ArrayList<String>() {{add("角色1");add("角色2");add("角色3");}};}常量对象中声明并…

力扣101.对称二叉树

目录 1.解题思路2.代码实现 1.解题思路 由于题中的接口只给了一个参数&#xff0c;因此如果我们使用题中给的接口做出递归就会很难&#xff0c;因此我们可以再给一个有着两个参数的接口&#xff0c;这样&#xff0c;对于左右子树的判断也会变得更加便利&#xff0c;然后&#…

设计模式篇---代理模式

文章目录 概念结构实例静态代理动态代理 总结 概念 代理模式&#xff1a;给某一个对象提供一个代理或占位符&#xff0c;并由代理对象来控制对原对象的访问。 比如我们想从其他国家买东西&#xff0c;但我们无法直接联系外国的商家&#xff0c;可以找代理商&#xff0c;让他们…

dell r720远程网络安装ubuntu20.04(无U盘)

登陆后界面&#xff0c;在主界面上&#xff0c;我们就可以看到各个硬件组件的状态。在快速启动任务栏中&#xff0c;可以对系统电源进行操作&#xff0c;如开机、关机等。安装操作系统&#xff0c;在虚拟控制台预览处点击>启动 按照浏览器出现的提示确定安装控件等&#x…

NSSCTF web刷题记录7

文章目录 [SDCTF 2022]CURL Up and Read [SDCTF 2022]CURL Up and Read 考点&#xff1a;SSRF 打开题目发现是curl命令&#xff0c;提示填入url 尝试http://www.baidu.com&#xff0c;成功跳转 将url的字符串拿去解码&#xff0c;得到json格式数据 读取下环境变量&#xff0c…