如果“go.mod”中的版本低于实际版本,“go build”是否应该失败?

如果“go.mod”中的版本低于实际版本,“go build”是否应该失败?,go,Go,我在go.mod文件中指定了go 1.15 当前编译器版本如下所示: ➜ go version go version go1.14.4 linux/amd64 然而,go build仍然成功地构建了一个二进制文件 这是预期的行为吗?不确定我能否在模块说明中找到解释。是的,这是一种预期行为 mod更像是一个用于依赖项和包管理的工具,而不是一个用于管理构建过程输出的工具。这就是为什么,如果您没有使用1.15中的任何功能,它仍然可以构建 有趣的是,如果您尝试将项目集构建为比您正在使用的版本更高的版本

我在
go.mod
文件中指定了
go 1.15

当前编译器版本如下所示:

➜ go version
go version go1.14.4 linux/amd64
然而,
go build
仍然成功地构建了一个二进制文件


这是预期的行为吗?不确定我能否在模块说明中找到解释。

是的,这是一种预期行为

mod更像是一个用于依赖项和包管理的工具,而不是一个用于管理构建过程输出的工具。这就是为什么,如果您没有使用1.15中的任何功能,它仍然可以构建

有趣的是,如果您尝试将项目集构建为比您正在使用的版本更高的版本(即使用go tool 1.14构建的1.15版本),并且您在
go.mod
中标记它需要使用更高的版本,它将在构建过程中显示:

# temp/test-go-build
./main.go:10:15: o.Redacted undefined (type url.URL has no field or method Redacted)
note: module requires Go 1.15
因此,go工具会尽力满足您的需求,但不会阻止您去想去的地方(明白吗?)。

中有一段关于
go
指令的内容,它说“语言版本确定在模块中编译包时可用的语言功能。该版本中提供的语言功能将可供使用。”–我想知道编译是否会失败,例如,代码是否只使用了1.15的功能,但
go.mod
1.14