我将Visual Studio Code版本1.33.1用作我们Go应用程序的IDE。我们想将Go版本1.11用于我们的应用程序。但是,似乎我们正在使用的一个或多个依赖项已为Go 1.12下载了一个程序包。现在,VS Code无法构建应用程序,并出现以下错误:
开始构建golang.org/x/sys/unix:模块需要执行1.12 go build github.com/pelletier/go-toml:模块需要Go 1.12 去[1,1]
我尝试重新安装Go 1.11,删除了有问题的软件包,然后重新安装。无论何时我尝试构建VS Code都无法下载1.12版本。 我希望VS Code不要下载软件包的1.12版本并将其限制为仅1.11。
答案 0 :(得分:1)
Go 1.12 Release Notes (February 2019)
go.mod文件中的go指令现在指示 该模块中文件使用的语言。它将被设置为 当前版本(转到1.12)(如果不存在现有版本)。如果去 模块的指令指定的版本比其中的工具链更新 使用时,go命令将尝试构建软件包,无论如何,并且 只有在构建失败的情况下,才会注意到不匹配。
go指令的这种更改用法意味着如果您使用Go 1.12来 构建一个模块,从而将go 1.12记录在go.mod文件中,您将 尝试使用Go 1.11构建同一模块时收到错误 通过Go 1.11.3。 Go 1.11.4或更高版本以及发行版都可以正常工作 比Go 1.11更早。如果必须使用Go 1.11至1.11.3,则可以 通过将语言版本设置为1.11来避免此问题 转到1.12转到工具,通过转到mod edit -go = 1.11。
$ go help go.mod The go.mod file itself is line-oriented, with // comments but no /* */ comments. Each line holds a single directive, made up of a verb followed by arguments. For example: module my/thing go 1.12 require other/thing v1.0.2 require new/thing/v2 v2.3.4 exclude old/thing v1.2.3 replace bad/thing v1.4.5 => good/thing v1.4.5 The verbs are module, to define the module path; go, to set the expected language version; require, to require a particular module at a given version or later; exclude, to exclude a particular module version from use; and replace, to replace a module version with a different module version.
Go1.12中首次引入了可能的问题解决方案:go.mod
动词go
,以设置所需的语言版本。
更新:
评论:我尝试使用建议的命令:go mod edit -go = 1.11 收到错误消息:提供了标记但未定义:-go我手动编辑为 在所有go.mod文件的模块声明下添加go 1.11,它 不工作。 – user2995358
您的结果值得期待。正如我之前解释和文档所述,go.mod
动词go
最初是在Go1.12中引入的。
例如,预期结果,
$ go version
go version go1.11.10 linux/amd64
$ go mod edit -go=1.11
flag provided but not defined: -go
usage: go mod edit [editing flags] [go.mod]
Run 'go help mod edit' for details.
$
$ go version
go version go1.12.5 linux/amd64
$ go mod edit -go=1.11
$
阅读文档:
$ go version go version go1.11.10 linux/amd64 $ go1.11 help modules Preliminary module support Go 1.11 includes preliminary support for Go modules, including a new module-aware 'go get' command. We intend to keep revising this support, while preserving compatibility, until it can be declared official (no longer preliminary), and then at a later point we may remove support for work in GOPATH and the old 'go get' command. $ $ go version go version devel +004fb5cb8d Fri May 3 03:49:11 2019 +0000 linux/amd64 $ go help modules Module support Go 1.13 includes official support for Go modules, including a module-aware 'go get' command. Module-aware mode is active by default. $
Go 1.11仅包含对Go模块的初步支持。 Go 1.13包括对Go模块的全面官方支持。
为什么您只需要初步的支持就可以在Go1.11中正常工作?