gpt4 book ai didi

go - 编译应用程序时可以要求最低 Go 版本吗?

转载 作者:行者123 更新时间:2023-12-03 10:07:19 24 4
gpt4 key购买 nike

我想确保人们在编译我的应用程序时没有使用 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 版本以防止运行时错误并显示友好的错误消息?

最佳答案

我能想到的最简单的方法是使用 +build !go1.13 添加一个新文件;因为为所有较新版本添加了 Go 版本构建标签(Go 1.14 有 go1.14go1.13go1.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

关于go - 编译应用程序时可以要求最低 Go 版本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65137235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com