“//go:build xxx”和“//+build xxx”之間有什么區(qū)別?

例如,https://github.com/golang/sys/blob/master/cpu/cpu_gccgo_x86.go#L5:

//go:build (386 || amd64 || amd64p32) && gccgo
// +build 386 amd64 amd64p32
// +build gccgo

package cpu

在我看來,作為構(gòu)建標記,// +build ... 可以很好地工作。為什么//go:build仍然顯式指定?

順便說一句,很難找到//go:build的mannual,但是// +build很容易(https://pkg.go.dev/cmd/go#hdr-構(gòu)建(U約束)

? 最佳回答:

//go:build是Go 1.17中引入的新條件編譯指令。

它旨在取代// +build指令,因為新語法帶來了一些關(guān)鍵改進:

  • 與其他現(xiàn)有Go指令和pragma的一致性,例如//go:generate
  • 支持標準布爾表達式,例如//go:build foo && bar,而舊的// +build注釋的語法不那么直觀。例如,AND用逗號// +build foo,bar和或空格// +build foo bar表示
  • 它由go fmt支持,它將自動修復(fù)指令在源文件中的錯誤位置,從而避免常見錯誤,如在指令和包語句之間不留空行。

這兩個構(gòu)建指令將在幾個Go版本中共存,以確保平穩(wěn)過渡,如相關(guān)提案文件中所述(以下N=17,重點):

轉(zhuǎn)到1。N將開始轉(zhuǎn)換。在Go 1.N中:

  • 生成將開始優(yōu)先選擇//go:build行進行文件選擇。如果文件中沒有//go:build,那么任何// +build行仍然適用。
  • 如果Go文件包含//go:build而沒有// +build,則構(gòu)建將不再失敗。
  • 如果Go或程序集文件中包含//go:build太晚,則生成將失敗。Gofmt將把錯位的//go:build和//+build行移到文件中的正確位置。
  • Gofmt將使用與其他Go布爾表達式(所有&&||運算符周圍的空格)相同的規(guī)則格式化//go:build行中的表達式。
  • 如果文件只包含// +build行,則gofmt將在其上方添加一個等效的//go:build行。
  • 如果一個文件同時包含//go:build// +build行,則gofmt將考慮//go:build是真理的來源,并更新// +build行以匹配,從而保持與早期版本的Go的兼容性。Gofmt還將拒絕被認為太復(fù)雜而無法轉(zhuǎn)換為// +build格式的//go:build行,盡管這種情況很少見。(注意此項目符號開頭的“If”。Gofmt不會將// +build行添加到只有//go:build.的文件中)
  • buildtags簽入go vet將添加對//go:build約束的支持。當Go源文件包含具有不同含義的//go:build// +build行時,它將失敗。如果檢查失敗,可以運行gofmt -w
  • 當Go源文件包含//go:build而沒有// +build時,buildtags檢查也會失敗,其包含模塊有一個Go行,列出Go 1.N之前的版本。如果檢查失敗,可以添加任何// +build行,然后運行gofmt -w,這將用正確的行替換它。或者可以將go.modgo版本升級為go 1.N。

更多信息:Golang條件編譯

主站蜘蛛池模板: 日韩经典精品无码一区| 精品久久久久中文字幕一区| 国产一区二区在线观看麻豆 | 国产伦精品一区二区三区| 在线精品视频一区二区| 国产亚洲3p无码一区二区| 国产一区二区三区播放| 国产精品亚洲专区一区 | 久久青草国产精品一区| 国产在线一区二区三区在线| 亚洲一本一道一区二区三区| 日本精品一区二区三区视频| 一区二区三区国模大胆| 国产精品无码一区二区在线观一| 亚洲日本中文字幕一区二区三区| 亚洲国产一区二区三区在线观看| 国产亚洲综合一区二区三区 | 激情亚洲一区国产精品| 性无码免费一区二区三区在线 | 亚洲午夜电影一区二区三区| 人妻无码第一区二区三区 | 精品一区二区三区自拍图片区| 久久99精品波多结衣一区| 中文字幕一区一区三区| 在线播放一区二区| 韩国精品一区二区三区无码视频| 国产无吗一区二区三区在线欢| 精品成人一区二区三区四区| 精品一区二区久久久久久久网站| 亚洲一区二区三区香蕉| AV无码精品一区二区三区| 国产精品538一区二区在线| 国产一区二区三区精品视频| 国产香蕉一区二区三区在线视频| 国产精品一区二区在线观看| 日韩电影在线观看第一区| 精品视频一区二区三区在线观看| 国偷自产视频一区二区久| 日本在线视频一区二区三区| 亚洲综合一区二区精品久久| 午夜福利av无码一区二区|