最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、介紹

在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)文章

  • Go語言結(jié)構(gòu)體的使用小結(jié)

    Go語言結(jié)構(gòu)體的使用小結(jié)

    在Go語言中,結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,它包含了一系列命名的數(shù)據(jù)字段, 下面就來詳細(xì)的介紹一下Go語言結(jié)構(gòu)體的使用,感興趣的可以了解一下
    2025-12-12
  • Golang共享變量如何解決問題

    Golang共享變量如何解決問題

    協(xié)程之間的通信只能夠通過通道。但是我們習(xí)慣于共享變量,而且很多時候使用共享變量能讓代碼更簡潔。那么Golang共享變量如何解決問題,感興趣的可以了解一下
    2021-12-12
  • Golang中由零值和gob庫特性引起B(yǎng)UG解析

    Golang中由零值和gob庫特性引起B(yǎng)UG解析

    這篇文章主要為大家介紹了Golang中由零值和gob庫特性引起B(yǎng)UG解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go語言對JSON進(jìn)行編碼和解碼的方法

    Go語言對JSON進(jìn)行編碼和解碼的方法

    這篇文章主要介紹了Go語言對JSON進(jìn)行編碼和解碼的方法,涉及Go語言操作json的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言反射獲取類型屬性和方法示例

    Go語言反射獲取類型屬性和方法示例

    這篇文章主要為大家介紹了本文將介紹?Go?反射?reflect.StructField?和?reflect.Method?相關(guān)的內(nèi)容,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang WebView跨平臺的桌面應(yīng)用庫的使用

    Golang WebView跨平臺的桌面應(yīng)用庫的使用

    Golang WebView是一個強(qiáng)大的桌面應(yīng)用庫,本文介紹了Golang WebView的特點(diǎn)和使用方法,并列舉示例詳細(xì)的介紹了其在實際項目中的應(yīng)用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • go語言中Timer和Ticker兩種計時器的使用

    go語言中Timer和Ticker兩種計時器的使用

    go語言中有Timer和Ticker這樣的兩種計時器,兩種計時器分別實現(xiàn)了不同的計時功能,本文主要介紹了go語言中Timer和Ticker兩種計時器的使用,感興趣的可以了解一下
    2024-08-08
  • Go高級特性探究之穩(wěn)定排序詳解

    Go高級特性探究之穩(wěn)定排序詳解

    Go 語言提供了 sort 包,其中最常用的一種是 sort.Slice() 函數(shù),本篇文章將為大家介紹如何使用 sort.SliceStable() 對結(jié)構(gòu)體數(shù)組的某個字段進(jìn)行穩(wěn)定排序,感興趣的可以了解一下
    2023-06-06
  • Go語言中反射的實現(xiàn)

    Go語言中反射的實現(xiàn)

    反射是Go語言中一個強(qiáng)大的特性,本文就來詳細(xì)的介紹一下反射的使用,具有一定的參考價值,感興趣的可以了解一下
    2026-04-04
  • Go互斥鎖和讀寫鎖完整代碼舉例

    Go互斥鎖和讀寫鎖完整代碼舉例

    讀寫鎖(sync.RWMutex)與互斥鎖(sync.Mutex)是Go語言中兩種最核心的并發(fā)控制機(jī)制,本質(zhì)區(qū)別在于對讀操作的并發(fā)支持,這篇文章主要介紹了Go互斥鎖和讀寫鎖的相關(guān)資料,需要的朋友可以參考下
    2026-06-06

最新評論

景东| 澄城县| 永仁县| 鲁山县| 建德市| 苍梧县| 苏尼特右旗| 大足县| 南靖县| 大英县| 东城区| 贵港市| 赞皇县| 宜黄县| 仁化县| 乃东县| 军事| 太谷县| 巨野县| 永寿县| 敖汉旗| 宿州市| 平阴县| 平顶山市| 高雄市| 张掖市| 青川县| 同仁县| 开远市| 屯昌县| 金山区| 三门县| 镇沅| 莒南县| 明溪县| 阿勒泰市| 游戏| 随州市| 沽源县| 西华县| 嘉峪关市|