引言
在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
程序打印出了我們的兩個免費功能,完成了我們應用程序的免費版本。
到目前為止,您創建了一個具有非常基本特性集的應用程序。接下來,我們將構建一種在構建時向應用程序