go編譯標(biāo)簽build?tag注釋里語法詳解
一、介紹
在Go中,build tag是添加到我們的代碼中第一行,來標(biāo)識編譯相關(guān)的信息。
其決定了當(dāng)前文件是否會被當(dāng)前 package 所包含。
用于限制一整個文件是否應(yīng)該被編譯入最終的二進(jìn)制文件,而不是一個文件中的部分代碼片段
go 編譯標(biāo)簽(build tag)語法如下:
// +build [tag]
- Build tags文件頂部附近,前面只能有空行和其他行注釋。
- 編譯標(biāo)記必須出現(xiàn)在 package 子句之前,并且為了與包文檔區(qū)分開來,它必須后跟一個空行。
二、編譯標(biāo)簽(build tag)的bool邏輯
當(dāng)我們在一個包中使用多個標(biāo)簽時,它們會使用布爾邏輯進(jìn)行交互,具體取決于我們?nèi)绾芜M(jìn)行聲明。
Build tags遵循以下三個規(guī)則:
- 以空格分隔的標(biāo)簽將在 OR 邏輯下進(jìn)行解釋。
- 逗號分隔的標(biāo)簽將在 AND 邏輯下進(jìn)行解釋。
- 每個術(shù)語都是一個字母數(shù)字單詞,如果前面有! 它意味著它被否定。
2.1、or標(biāo)簽邏輯
給定標(biāo)簽:
// +build tag1 tag2
OR解釋是,如果在執(zhí)行build構(gòu)建命令時存在tag1 或 tag2,則將包含此文件。
2.2、and標(biāo)簽邏輯
如果我們使用標(biāo)簽:
// +build tag1, tag2
解釋是 tag1 且(AND) tag2 必須存在于build構(gòu)建命令中,我們的文件才能包含在編譯中。
2.3、!(非標(biāo)簽邏輯)
如果我們使用標(biāo)簽
// +build !tag1
解釋是,非tag1,我們的文件才會build編譯
三、如何使用
3.1 新建build tag
我們新建一個 buildtag 文件夾,并在文件夾下新建如下4個空文件。
. ├── dev.go ├── main.go ├── prod.go └── test.go
我們打開main.go 輸入代碼如下:
package main
import "fmt"
var configArr []string
func main() {
for _, conf := range configArr {
fmt.Println(conf)
}
}我們打開dev.go 輸入代碼如下:
// +build dev
package main
func init() {
configArr = append(configArr, "mysql dev")
}我們打開prod.go 輸入代碼如下:
// +build prod
package main
func init() {
configArr = append(configArr, "mysql prod")
}我們打開test.go 輸入代碼如下:
// +build test1
package main
func init() {
configArr = append(configArr, "mysql test")
}3.2 使用 tags 編譯
3.2.1 簡單使用單個tag編譯
我們使用
go build -tags "dev"
在文件夾里生成了二進(jìn)制執(zhí)行文件 buildtag
我們執(zhí)行一下:
? ./buildtag
輸出:
mysql dev
3.2.2 多個關(guān)系編譯
我們使用
go build -tags "dev prod"
在文件夾里生成了二進(jìn)制執(zhí)行文件 buildtag
我們執(zhí)行一下:
? ./buildtag
輸出:
mysql dev
mysql prod
四、go:build 與 +build 的區(qū)別
//go:build
是 Go 1.17 中引入的新條件編譯指令格式。它旨在替換
// +build
指令。為何要采用新的格式呢?
對比一下新舊格式的區(qū)別就知道了:
// go:build linux && amd64 || darwin // +build linux,amd64 darwin
顯而易見的優(yōu)勢:
go:build 這種格式,對 coder 來說,更容易理解其邏輯組合與 //go:embed 和 //go:generate 這些命令相比較,格式上進(jìn)行了統(tǒng)一
其他的學(xué)習(xí)資料
gin通過go build -tags實現(xiàn)json包的切換
以上就是go編譯標(biāo)簽build tag注釋里語法詳解的詳細(xì)內(nèi)容,更多關(guān)于go編譯標(biāo)簽build tag注釋語法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang中由零值和gob庫特性引起B(yǎng)UG解析
這篇文章主要為大家介紹了Golang中由零值和gob庫特性引起B(yǎng)UG解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Golang WebView跨平臺的桌面應(yīng)用庫的使用
Golang WebView是一個強(qiáng)大的桌面應(yīng)用庫,本文介紹了Golang WebView的特點(diǎn)和使用方法,并列舉示例詳細(xì)的介紹了其在實際項目中的應(yīng)用,具有一定的參考價值,感興趣的可以了解一下2024-03-03

