Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译应用程序时,我是否可以要求最低Go版本?_Go - Fatal编程技术网

编译应用程序时,我是否可以要求最低Go版本?

编译应用程序时,我是否可以要求最低Go版本?,go,Go,我想确保人们在编译我的应用程序时没有使用Go 1.12或更高版本;主要原因是: return fmt.Errorf("foo: %w", err) 将在Go 1.12中编译良好,但实际上不会像预期的那样运行,因为它需要在Go 1.13或更高版本中进行运行时更改才能获取该%w 即使有一些修改引入了编译错误,比如二进制文本或数值文本中的,一个更好的“you need Go 1.13或更新版”消息会更好,也不会让人混淆,因为不是每个人都熟悉Go,也不知道如何处理语法错误(似乎有些

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

return fmt.Errorf("foo: %w", err)
将在Go 1.12中编译良好,但实际上不会像预期的那样运行,因为它需要在Go 1.13或更高版本中进行运行时更改才能获取该
%w

即使有一些修改引入了编译错误,比如二进制文本或数值文本中的
,一个更好的“you need Go 1.13或更新版”消息会更好,也不会让人混淆,因为不是每个人都熟悉Go,也不知道如何处理语法错误(似乎有些人仍然使用较旧的Go版本)

我在我的
go.mod
文件中添加了
go 1.13
,但是我仍然可以用旧版本编译它(并且添加
go 1.16
和用go 1.15编译也可以)


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

我能找到的最简单的方法是使用
+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

TIL;干得好。您还可以在
go.mod
中提到最低版本,但这不会阻止您使用较旧版本进行编译。是的,这实际上并没有在@TehSphinX中起到多大作用,尽管它会在较新的go版本IIRC中禁用不兼容的功能,因此您不会“意外”使用它们。但据我所知,这就是它真正的功能。我忘了提到这一点,但我会更新问题,指出这并不像人们预期的那样有效。是的,它只会尝试使用旧版本进行编译,只有在编译失败时才会输出错误。这与您的
fmt
示例不同。