1

一切正常,直到我添加了一个私有存储库的依赖项。我注意到自动完成功能停止工作,并且 vscode 有一个错误通知:

Error loading workspace: err: exit status 1: stderr: go:
bitbucket.org/my-group/my-private-repo@v0.0.0-20210512194559-2c29669c4ecc: 
reading https://api.bitbucket.org/2.0/repositories/my-group/my-private-repo?fields=scm: 
403 Forbidden server response: Access denied. You must have write or admin access. 
go: bitbucket.org/my-group/my-private-repo@v0.0.0-20210512194559-2c29669c4ecc: 
reading https://api.bitbucket.org/2.0/repositories/my-group/my-private-repo?fields=scm: 
403 Forbidden server response: Access denied. You must have write or admin access. 
: packages.Load error

似乎 go 扩展正在尝试访问我的私人仓库:

  1. 为什么这对于代码竞争能够起作用是必要的?
  2. 如果有必要,如何将我的 SSH 密钥提供给 go 扩展?
  3. 其他解决方法?
4

1 回答 1

1
  1. 它会尝试获取您的依赖项的来源,以便为您生成实际的建议。它想要加载源 go 模块样式,我猜你的依赖项位于 GOPATH 中。您希望它能够优雅地处理连接错误,并且仍然为它可以访问的代码提供补全,所以这可能是一个错误,考虑在 github 上创建一个问题(我不知道是哪个项目)。
  2. 在这种情况下,同样通过执行以下修复,您也可以将 go mod 用于私有依赖项,而不必以“旧式”方式手动管理依赖项。Go 模块默认使用 Git,您可以通过将以下内容添加到全局 git 配置文件来指示 git 始终使用 SSH 而不是 HTTPS:
[url "git@bitbucket.org:"]
    insteadOf = https://bitbucket.org/

假设您不需要任何特殊配置来进行普通的 git over ssh 操作,则应该自动使用您的私钥。

  1. Go 模块支持通过供应商目录包含依赖项。如果您将依赖项放在那里,代码完成应该使用它而不是尝试下载它。但我无法确认这一点,从未尝试过
于 2021-11-09T12:08:04.553 回答