VS Code Go 扩展由于无法更改 go.mod 而无法加载?

Kur*_*eek 8 go visual-studio-code

这个问题似乎已经在Go update to go.mod required, unavailable by -mod=readonly 中被问到:packages.Load error但没有得到回答,所以重新发布它。运行 Go 1.15.7,我尝试加载一个 Go 项目,go.mod但 VS Code 显示一条包含以下错误的通知:

Error loading workspace: err: exit status 1: stderr: go: updates to go.mod needed, disabled by -mod=readonly : packages.Load error
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

似乎启用了只读模式,但我不知道如何禁用它。我尝试简单地增加文件权限go.mod

chmod a+w go.mod
Run Code Online (Sandbox Code Playgroud)

但无济于事。知道如何修复此错误并允许加载 Go 扩展吗?

Kur*_*eek 9

通过运行此错误似乎已自行解决

go mod tidy
Run Code Online (Sandbox Code Playgroud)

手动。不过,我仍然很好奇是什么导致了这种情况,因为扩展可能仍然无法完全工作。

  • 运行 `go mod tidy` 只是对 `go.mod` 进行了所需的更改,但插件不允许这样做,因为它是使用 `-mod=readonly` 运行的 (2认同)

小智 7

您只需添加一个 gopls 构建参数即可轻松解决settings.json此问题,允许从范围外的模块导入。

大致如下:

{
    "gopls": {
    "build.allowModfileModifications": true
    }
}
Run Code Online (Sandbox Code Playgroud)

供参考: https: //github.com/golang/vscode-go/blob/master/docs/settings.md#buildallowmodfilemodifications

还有更多背景信息:

在 Go 1.16 中,Go 命令将不再自动修改用户的 go.mod 和 go.sum 文件(https://tip.golang.org/doc/go1.16#tools)。为了匹配此行为,gopls 现在在运行 go 命令时也使用 -mod=readonly。go 命令报告的任何错误都将提供建议的修复,以便对 go.mod 或 go.sum 文件进行必要的修复。因此,当您的 go.mod 或 go.sum 文件出现错误时,您的工作区可能会处于部分损坏的状态。golang/go#42266 将缓解这个问题,但可能要到二月份才能解决。

不推荐:如果您必须选择退出此行为,则可以将allowModfileModifications 配置设置为true。