为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
饮歌长啸 2022-07-18 16:05:26
我想确保人们在编译我的应用程序时没有使用 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


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信