golang 條件編譯控制

h6.jpeg

在 xxx.go 文件開(kāi)頭添加代碼 //go:build debug

? 不加 //go:build debug 的文件 → 永遠(yuǎn)會(huì)被編譯(默認(rèn)行為)
? 加了 //go:build debug 的文件 → 「默認(rèn)不編譯」,只有運(yùn)行編譯命令時(shí)手動(dòng)加 -tags debug 才會(huì)編譯

通俗解釋

  1. 加了這個(gè)注釋的文件,默認(rèn)是被忽略的,生產(chǎn)打包go build/go run 完全不會(huì)包含它;
  2. 只有寫(xiě)命令:go run -tags debug xxx.gogo build -tags debug xxx.go,這個(gè)文件才會(huì)被編譯進(jìn)去;
  3. 反向用法: //go:build !debug → 意思是「只有不加 debug 標(biāo)簽編譯時(shí),這個(gè)文件才生效」,注意有個(gè)!

例如

情況 1:你的文件第一行寫(xiě)了 //go:build debug

  • 執(zhí)行 go run main.go → 這個(gè)文件不參與編譯(被跳過(guò))
  • 執(zhí)行 go run -tags debug main.go → 這個(gè)文件參與編譯

情況 2:你的文件沒(méi)寫(xiě)這個(gè)注釋

  • 不管執(zhí)行 go run main.go 還是 go run -tags debug main.go → 都會(huì)編譯這個(gè)文件

使用vscode系列編輯器時(shí),用到了 gopls 語(yǔ)言服務(wù)器,默認(rèn)會(huì)報(bào)下面的警告提示

No packages found for open file D:\site\zero-core\search\tree_debug.go. This file may be excluded due to its build tags; try adding "-tags=<build tag>" to your gopls "buildFlags" configuration See the documentation for more information on working with build tags: https://github.com/golang/tools/blob/master/gopls/doc/settings.md#buildflags. go list

settings.json 配置中,json第一層添加如下配置即可

"gopls": {
  "buildFlags": ["-tags=debug"]
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C/C++中可以通過(guò)宏定義實(shí)現(xiàn)條件編譯,比如在不同平臺(tái)的機(jī)器上,調(diào)用不同的函數(shù),或者通過(guò)編譯是傳遞參數(shù),調(diào)用不同...
    QxQx閱讀 1,068評(píng)論 0 4
  • build tag允許進(jìn)行有限的條件編譯,即根據(jù)某些條件編譯不同版本的代碼。 標(biāo)簽是在每個(gè)文件的頂部指定的,然后是...
    asdzxc閱讀 1,891評(píng)論 0 0
  • Go 編譯時(shí)插樁 Go 語(yǔ)言的編譯時(shí)插樁是一種在編譯階段自動(dòng)注入監(jiān)控代碼的技術(shù),目的是在不修改業(yè)務(wù)代碼的情況下,實(shí)...
    可觀測(cè)性技術(shù)閱讀 148評(píng)論 0 0
  • 條件編譯 在文件開(kāi)始的位置package語(yǔ)句之前,使用// +build可以添加編譯標(biāo)簽,以滿足不同場(chǎng)景不同編譯的...
    如雨隨行2020閱讀 335評(píng)論 0 0
  • go get go get為當(dāng)前開(kāi)發(fā)的模塊解析并添加依賴,然后構(gòu)建并安裝依賴。 添加依賴 上策:查找最新的打標(biāo)簽的...
    SunnyTeng閱讀 920評(píng)論 0 0

友情鏈接更多精彩內(nèi)容