go build -tags的其他用法命令詳解
一、go build -tags用法?
1. 進階邏輯用法(標簽組合更靈活)
- “與”邏輯:標簽間用空格分隔,必須同時滿足才編譯
代碼標簽://go:build linux && amd64(僅Linux+64位系統(tǒng)生效)
編譯命令:go build -tags "linux amd64"(必須同時傳兩個標簽,才會包含這段代碼) - “非”邏輯:用
!排除標簽,匹配“不含該標簽”的代碼
代碼標簽://go:build !windows(除Windows外所有系統(tǒng)生效)
編譯命令:go build -tags "linux"(無需額外傳!windows,只要標簽不是windows就會包含)
2. 關(guān)聯(lián)依賴/編譯細節(jié)的冷門實用用法
控制標準庫功能:通過標簽啟用標準庫“隱藏功能”
例:go build -tags netgo(強制讓net庫用純Go實現(xiàn)的網(wǎng)絡(luò)協(xié)議,而非系統(tǒng)底層C實現(xiàn),避免跨平臺依賴問題)
配合第三方庫“條件依賴”:只編譯指定庫的代碼
代碼里引了兩個數(shù)據(jù)庫庫(mysql/redis),分別打標簽:
//go:build use_mysql import _ "github.com/go-sql-driver/mysql" //go:build use_redis import _ "github.com/redis/go-redis/v9"
編譯時只引mysql(不引redis):go build -tags use_mysql(自動排除redis依賴,減小程序體積)
多標簽批量生效:一次傳多個標簽,匹配“任意一個”或“組合條件”
命令:go build -tags "prod linux amd64"(會包含:prod標簽代碼 + linux+amd64組合標簽代碼 + 無標簽代碼)
二、go build -tags和go install -tags有什么區(qū)別?
go build -tags 和 go install -tags 中的 -tags 參數(shù)功能完全一致(都是通過標簽控制編譯哪些代碼),核心區(qū)別在于 go build 和 go install 這兩個命令本身的行為差異,而非 -tags 的用法。
1. 核心差異:命令本身的作用
| 維度 | go build -tags <標簽> | go install -tags <標簽> |
|---|---|---|
| 輸出位置 | 默認在當前目錄生成可執(zhí)行文件(可通過 -o 指定路徑) | 固定安裝到 $GOPATH/bin 或 $GOBIN 目錄(無需 -o,文件名固定為包名) |
| 適用場景 | 臨時編譯、本地測試(輸出文件留在項目內(nèi)) | 安裝可執(zhí)行程序到系統(tǒng)可執(zhí)行路徑(方便全局調(diào)用,如工具類程序) |
| 對模塊緩存的影響 | 不影響,僅生成可執(zhí)行文件 | 會將編譯結(jié)果緩存到模塊緩存($GOPATH/pkg/mod),加速后續(xù)安裝 |
2.-tags參數(shù)的一致性
兩者的 -tags 用法、邏輯(與/或/非)、對代碼的過濾規(guī)則完全相同。例如:
用標簽區(qū)分 dev/prod 環(huán)境時:
# 本地編譯一個dev版本的可執(zhí)行文件(留在當前目錄) go build -tags dev -o myapp-dev # 安裝prod版本到全局路徑(可直接在終端用myapp命令調(diào)用) go install -tags prod
總結(jié)
- 若想臨時編譯一個可執(zhí)行文件到當前目錄(如測試),用
go build -tags <標簽>; - 若想將程序安裝到全局路徑方便長期使用,用
go install -tags <標簽>; - 兩者的
-tags作用完全一樣,僅命令的輸出位置和用途不同。
到此這篇關(guān)于go build -tags的其他用法的文章就介紹到這了,更多相關(guān)go build -tags用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang如何實現(xiàn)任意進制轉(zhuǎn)換的方法示例
進制轉(zhuǎn)換是人們利用符號來計數(shù)的方法,進制轉(zhuǎn)換由一組數(shù)碼符號和兩個基本因素“基數(shù)”與“位權(quán)”構(gòu)成,這篇文章主要給大家介紹了關(guān)于Golang如何實現(xiàn)10進制轉(zhuǎn)換62進制的方法,文中給出了詳細的示例代碼供大家參考學(xué)習(xí)學(xué)習(xí),下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
golang channel讀取數(shù)據(jù)的幾種情況
本文主要介紹了golang channel讀取數(shù)據(jù)的幾種情況,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

