欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解

 更新時(shí)間:2023年09月05日 15:09:32   作者:海生  
這篇文章主要為大家介紹了go編譯標(biāo)簽build?tag注釋里語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、介紹

在Go中,build tag是添加到我們的代碼中第一行,來(lái)標(biāo)識(shí)編譯相關(guān)的信息。

其決定了當(dāng)前文件是否會(huì)被當(dāng)前 package 所包含。

用于限制一整個(gè)文件是否應(yīng)該被編譯入最終的二進(jìn)制文件,而不是一個(gè)文件中的部分代碼片段

go 編譯標(biāo)簽(build tag)語(yǔ)法如下:

// +build [tag]
  • Build tags文件頂部附近,前面只能有空行和其他行注釋。
  • 編譯標(biāo)記必須出現(xiàn)在 package 子句之前,并且為了與包文檔區(qū)分開(kāi)來(lái),它必須后跟一個(gè)空行。

二、編譯標(biāo)簽(build tag)的bool邏輯

當(dāng)我們?cè)谝粋€(gè)包中使用多個(gè)標(biāo)簽時(shí),它們會(huì)使用布爾邏輯進(jìn)行交互,具體取決于我們?nèi)绾芜M(jìn)行聲明。

Build tags遵循以下三個(gè)規(guī)則:

  • 以空格分隔的標(biāo)簽將在 OR 邏輯下進(jìn)行解釋。
  • 逗號(hào)分隔的標(biāo)簽將在 AND 邏輯下進(jìn)行解釋。
  • 每個(gè)術(shù)語(yǔ)都是一個(gè)字母數(shù)字單詞,如果前面有! 它意味著它被否定。

2.1、or標(biāo)簽邏輯

給定標(biāo)簽:

// +build tag1 tag2

OR解釋是,如果在執(zhí)行build構(gòu)建命令時(shí)存在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,我們的文件才會(huì)build編譯

三、如何使用

3.1 新建build tag

我們新建一個(gè) buildtag 文件夾,并在文件夾下新建如下4個(gè)空文件。

.
├── dev.go
├── main.go
├── prod.go
└── test.go

我們打開(kāi)main.go 輸入代碼如下:

package main
import "fmt"
var configArr []string
func main() {
    for _, conf := range configArr {
        fmt.Println(conf)
    }
}

我們打開(kāi)dev.go 輸入代碼如下:

// +build dev
package main
func init() {
    configArr = append(configArr, "mysql dev")
}

我們打開(kāi)prod.go 輸入代碼如下:

// +build prod
package main
func init() {
    configArr = append(configArr, "mysql prod")
}

我們打開(kāi)test.go 輸入代碼如下:

// +build test1
package main
func init() {
    configArr = append(configArr, "mysql test")
}

3.2 使用 tags 編譯

3.2.1 簡(jiǎn)單使用單個(gè)tag編譯

我們使用

go build  -tags "dev"

在文件夾里生成了二進(jìn)制執(zhí)行文件 buildtag

我們執(zhí)行一下:

? ./buildtag

輸出:

mysql dev

3.2.2 多個(gè)關(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

指令。為何要采用新的格式呢?

對(duì)比一下新舊格式的區(qū)別就知道了:

// go:build linux && amd64 || darwin
// +build linux,amd64 darwin

顯而易見(jiàn)的優(yōu)勢(shì):

go:build 這種格式,對(duì) coder 來(lái)說(shuō),更容易理解其邏輯組合與 //go:embed 和 //go:generate 這些命令相比較,格式上進(jìn)行了統(tǒng)一

其他的學(xué)習(xí)資料

gin通過(guò)go build -tags實(shí)現(xiàn)json包的切換

以上就是go編譯標(biāo)簽build tag注釋里語(yǔ)法詳解的詳細(xì)內(nèi)容,更多關(guān)于go編譯標(biāo)簽build tag注釋語(yǔ)法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論