亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go編譯標簽build?tag注釋里語法詳解

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

一、介紹

在Go中,build tag是添加到我們的代碼中第一行,來標識編譯相關的信息。

其決定了當前文件是否會被當前 package 所包含。

用于限制一整個文件是否應該被編譯入最終的二進制文件,而不是一個文件中的部分代碼片段

go 編譯標簽(build tag)語法如下:

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

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

當我們在一個包中使用多個標簽時,它們會使用布爾邏輯進行交互,具體取決于我們?nèi)绾芜M行聲明。

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

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

2.1、or標簽邏輯

給定標簽:

// +build tag1 tag2

OR解釋是,如果在執(zhí)行build構建命令時存在tag1 或 tag2,則將包含此文件。

2.2、and標簽邏輯

如果我們使用標簽:

// +build tag1, tag2

解釋是 tag1 且(AND) tag2 必須存在于build構建命令中,我們的文件才能包含在編譯中。

2.3、!(非標簽邏輯)

如果我們使用標簽

// +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"

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

我們執(zhí)行一下:

? ./buildtag

輸出:

mysql dev

3.2.2 多個關系編譯

我們使用

go build  -tags "dev prod"

在文件夾里生成了二進制執(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 這些命令相比較,格式上進行了統(tǒng)一

其他的學習資料

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

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

相關文章

  • Golang信號量設計實現(xiàn)示例詳解

    Golang信號量設計實現(xiàn)示例詳解

    這篇文章主要為大家介紹了Golang信號量設計實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • go編程中go-sql-driver的離奇bug解決記錄分析

    go編程中go-sql-driver的離奇bug解決記錄分析

    這篇文章主要為大家介紹了go編程中go-sql-driver的離奇bug解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Golang中的time.Duration類型用法說明

    Golang中的time.Duration類型用法說明

    這篇文章主要介紹了Golang中的time.Duration類型用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言指針訪問結構體的方法

    Go語言指針訪問結構體的方法

    這篇文章主要介紹了Go語言指針訪問結構體的方法,涉及Go語言指針及結構體的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言如何使用 Viper 來管理配置

    Go語言如何使用 Viper 來管理配置

    在現(xiàn)代軟件開發(fā)中,良好的配置管理可以極大地提升應用的靈活性和可維護性,下面我們就來看看GO語言中如何使用 Viper 來管理配置吧
    2024-11-11
  • Golang基礎常識性面試中常見的六大陷阱及應對技巧總結

    Golang基礎常識性面試中常見的六大陷阱及應對技巧總結

    Go是一門簡單有趣的語言,但與其他語言類似,它會有一些技巧,這篇文章主要給大家介紹了關于Golang基礎常識性面試中常見的六大陷阱及應對技巧的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Go語言規(guī)范context?類型的key用法示例解析

    Go語言規(guī)范context?類型的key用法示例解析

    這篇文章主要為大家介紹了Go語言規(guī)范context?類型的key用法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • GO利用channel協(xié)調(diào)協(xié)程的實現(xiàn)

    GO利用channel協(xié)調(diào)協(xié)程的實現(xiàn)

    本文主要介紹了GO利用channel協(xié)調(diào)協(xié)程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • go語言算法題解二叉樹的拷貝、鏡像和對稱

    go語言算法題解二叉樹的拷貝、鏡像和對稱

    這篇文章主要為大家詳細介紹了go語言算法題解二叉樹的拷貝、鏡像和對稱,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-01-01
  • 深入解析golang編程中函數(shù)的用法

    深入解析golang編程中函數(shù)的用法

    這篇文章主要介紹了golang編程中函數(shù)的用法,是Go語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-10-10

最新評論