自定義帶有構建標記的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.pswp.cn/news/213287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213287.shtml
英文地址,請注明出處:http://en.pswp.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…