首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译应用程序时可以要求Go的最低版本吗?

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

Stack Overflow用户
提问于 2020-12-04 10:51:32
回答 1查看 218关注 0票数 2

我想确保人们在编译我的应用程序时没有使用Go 1.12或更早的版本;主要是因为:

代码语言:javascript
运行
复制
return fmt.Errorf("foo: %w", err)

将在Go 1.12中编译得很好,但实际上不会像预期的那样运行,因为它需要在Go 1.13或更高版本中进行运行时更改才能获得该%w

即使有一些改变引入了编译错误,比如二进制文字或数字文字中的_,一个更好的“你需要Go 1.13或更高版本”的-message会更好,更少令人困惑,因为不是每个人都熟悉Go并知道如何处理语法错误(似乎有些人仍然使用相当旧的Go版本)。

我将go 1.13添加到我的go.mod文件中,但我仍然可以在旧版本中很好地编译它(添加go 1.16并使用Go 1.15编译也可以)。

有没有办法在编译应用程序时要求最低Go版本,以防止运行时错误并显示友好的错误消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 10:51:32

我能想到的最简单的方法是用+build !go1.13添加一个新文件;因为所有新版本都添加了Go版本的构建标签(Go 1.14有go1.14go1.13go1.12等)。它将只编译Go 1.13之前的版本,而对于任何较新的版本将被忽略:

代码语言:javascript
运行
复制
// +build !go1.13

package main

func init() {
    "You need Go 1.13 or newer to compile this program"
}

这引入了一个故意的编译错误,这导致了一个相当不错的错误消息:

代码语言:javascript
运行
复制
$ 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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65137235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档