你正在使用哪个版本的Go( go version
)?
$ go version
go version go1.20.3 darwin/amd64 (unrelated)
这个问题在最新版本中是否重现?
是的
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
unrelated, preferred not to disclose
你做了什么?
我使用了vscode-go来浏览一个我没有权限访问其依赖项的仓库。该扩展无法加载工作区,抱怨说我没有访问相关仓库的权限,因此vscode甚至无法索引我已有的源代码。经过深入研究,我发现给出抱怨的命令是:
https://github.com/golang/vscode-go/blob/master/src/goPackages.ts#L60
go list -e -f '{{.Name}};{{.ImportPath}};{{.Dir}}' std all
你期望看到什么?
我期望它能容忍错误,就像通过传递-e
参数告诉它的那样。-e标志改变了对错误包的处理,即找不到的包或格式错误的包。
你看到了什么?
相反,它试图下载缺失的包(由于权限错误),如果下载失败则失败。
当前的解决方法
对于任何陷入类似情况的人,也许你可以尝试go mod tidy -e
,然后通过设置:
{
"go.toolsEnvVars": {
"GO111MODULE": "off"
}
}
在.vscode/settings.json
中禁用go模块。modload
包似乎与go包一起工作。
7条答案
按热度按时间68bkxrlz1#
我对golang源代码不熟悉,但我怀疑是传递给
load.PackagesAndErrors
的AutoVCS
标志引发了错误。
fzsnzjdm2#
我深入挖掘后发现,这不仅仅是关于AutoVCS的问题,而且:
当没有列出模块(没有
-mod
标志)时,如果启用了go modules(现在默认启用),go list
不会告诉load.PackagesAndErrors
执行modload.LoadPackages
以允许错误,这在发生错误时会导致进程终止。我认为
modload.LoadPackages
也在执行go mod tidy
时使用。它还接受一个AllowError
选项。8oomwypt3#
在通过重新编译带有正确传播到
modload
的listE
的go二进制文件解决了这个问题后,我注意到gopls
有几次尝试调用go list
而不调用-e
:由于仓库权限问题,它们都以代码1退出。
我是否也应该为gopls提交一个问题?
hs1ihplo4#
CC @bcmills, @matloob。
mspsb9vt5#
抱歉打扰,但你有没有深入研究/查看过这个?
fxnxkyjh6#
这真的需要超过一个月的时间来调查吗?🤔至少取得一些进展会很好,请?
llycmphe7#
这个问题在待办事项中,并且Go是一个开源项目。如果你愿意帮助推动它,我很高兴能审查一个更改来修复它。