我想確保人們在編譯我的應用程序時沒有使用 Go 1.12 或更早版本;主要是因為這個:return fmt.Errorf("foo: %w", err)將在 Go 1.12 中編譯良好,但實際上不會像預期的那樣運行,因為它需要在 Go 1.13 或更新版本中進行運行時更改才能接受%w.即使有一些更改會引入編譯錯誤,例如二進制文字或_數字文字,更好的“你需要 Go 1.13 或更新版本”的消息會更好,更少混淆,因為不是每個人都熟悉 Go 并且知道什么與語法錯誤有關(似乎有些人仍在使用相當舊的 Go 版本)。我添加go 1.13到我的go.mod文件中,但我仍然可以使用舊版本很好地編譯它(并且go 1.16使用 Go 1.15 添加和編譯也可以)。有沒有辦法在編譯應用程序時要求最低 Go 版本以防止運行時錯誤并顯示友好的錯誤消息?
1 回答

胡子哥哥
TA貢獻1825條經驗 獲得超6個贊
我能想到的最簡單的方法是添加一個新文件+build !go1.13;由于為所有較新版本添加了 Go 版本構建標簽(Go 1.14 有go1.14、go1.13、go1.12等),因此它將僅針對 Go 1.13 之前的版本進行編譯,并且對于任何較新的版本都將被忽略:
// +build !go1.13
package main
func init() {
"You need Go 1.13 or newer to compile this program"
}
這引入了一個故意的編譯錯誤,這會導致一個相當不錯的錯誤消息:
$ go install ./cmd/app
# zgo.at/app/cmd/app
cmd/app/old.go:8:2: "You need Go 1.13 or newer to compile this program" evaluated but not used
- 1 回答
- 0 關注
- 100 瀏覽
添加回答
舉報
0/150
提交
取消