例如,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)鍵改進://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,重點):
更多信息:Golang條件編譯