1. 背景:
下载完GO环境和VSCode的GO配套插件后,试图运行hello world程序,此时VSCode弹出警告:
提示有几个go的工具没有下载,于是我点击install 下载:
==》下载时报错,一般是出现超时timeout错误,
输出的报错如下:(我这是提示了三个tool(dlv staticcheck gopls )缺少,所以下载三个)
Tools environment: GOPATH=/Users/apple/go
Installing 3 tools at /Users/apple/go/bin in module mode.
dlv
staticcheck
gopls
Installing github.com/go-delve/delve/cmd/dlv@latest FAILED
{
"killed": false,
"code": 1,
"signal": null,
"cmd": "/usr/local/bin/go install -v github.com/go-delve/delve/cmd/dlv@latest",
"stdout": "",
"stderr": "go: github.com/go-delve/delve/cmd/dlv@latest: module github.com/go-delve/delve/cmd/dlv: Get \"https://proxy.golang.org/github.com/go-delve/delve/cmd/dlv/@v/list\": dial tcp 142.251.42.241:443: i/o timeout\n"
}
Installing honnef.co/go/tools/cmd/staticcheck@latest FAILED
{
"killed": false,
"code": 1,
"signal": null,
"cmd": "/usr/local/bin/go install -v honnef.co/go/tools/cmd/staticcheck@latest",
"stdout": "",
"stderr": "go: honnef.co/go/tools/cmd/staticcheck@latest: module honnef.co/go/tools/cmd/staticcheck: Get \"https://proxy.golang.org/honnef.co/go/tools/cmd/staticcheck/@v/list\": dial tcp 142.251.42.241:443: i/o timeout\n"
}
Installing golang.org/x/tools/gopls@latest FAILED
{
"killed": false,
"code": 1,
"signal": null,
"cmd": "/usr/local/bin/go install -v golang.org/x/tools/gopls@latest",
"stdout": "",
"stderr": "go: golang.org/x/tools/gopls@latest: module golang.org/x/tools/gopls: Get \"https://proxy.golang.org/golang.org/x/tools/gopls/@v/list\": dial tcp 142.251.42.241:443: i/o timeout\n"
}
3 tools failed to install.
dlv: failed to install dlv(github.com/go-delve/delve/cmd/dlv@latest): Error: Command failed: /usr/local/bin/go install -v github.com/go-delve/delve/cmd/dlv@latest
go: github.com/go-delve/delve/cmd/dlv@latest: module github.com/go-delve/delve/cmd/dlv: Get "https://proxy.golang.org/github.com/go-delve/delve/cmd/dlv/@v/list": dial tcp 142.251.42.241:443: i/o timeout
staticcheck: failed to install staticcheck(honnef.co/go/tools/cmd/staticcheck@latest): Error: Command failed: /usr/local/bin/go install -v honnef.co/go/tools/cmd/staticcheck@latest
go: honnef.co/go/tools/cmd/staticcheck@latest: module honnef.co/go/tools/cmd/staticcheck: Get "https://proxy.golang.org/honnef.co/go/tools/cmd/staticcheck/@v/list": dial tcp 142.251.42.241:443: i/o timeout
gopls: failed to install gopls(golang.org/x/tools/gopls@latest): Error: Command failed: /usr/local/bin/go install -v golang.org/x/tools/gopls@latest
go: golang.org/x/tools/gopls@latest: module golang.org/x/tools/gopls: Get "https://proxy.golang.org/golang.org/x/tools/gopls/@v/list": dial tcp 142.251.42.241:443: i/o timeout
一看全都是timeout错误
2. 解决方案:
ref : vscode 安装go环境无法安装gopls等插件,响应超时、失去连接等问题的简单解决方案_Remember to smile的博客-CSDN博客
干货满满的 Go Modules 和 goproxy.cn - 掘金
简言之,超时一般是因为连不上golang服务器,所以我们要换一下连接的网站:
方法是:
Step(1) : 在命令行中直接输入以下两条语句:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
含义是:GO111MODULE简言之是一个模块管理器,有了它就不用再像之前一样修改GOPATH了(“Go modules 出现的目的之一就是为了解决 GOPATH 的问题,也就相当于是抛弃 GOPATH 了”),我们通过令GO11MODULE值置为on强制要求使用gomodule来管理模块
事实上,GO1.11就可以使用gomodule来管理模块了,但是,go的1.11和1.12版本的gomodule有些不稳定,但是,go1.13之后的版本都是可以稳定支持gomodule模块管理的
[ps-1]:模块和包的关系是:模块 包含 包,一个模块 (可能)包含有 多个包
[ps-2]查看go版本的语句:(在命令行直接输入)
go version
而后,将拉取go tools的网站通过 GOPROXY 重置为上述的 https://goproxy.cn (国内go网站)
direct参数的含义我没咋看,有需要的放个链接在这:GOPROXY变量中的direct的作用是什么 · Issue #21 · goproxy/goproxy · GitHub
Step(2) : 下载之前没有下好的tools
具体方法是:
刚刚上述的报错中,每个tool对应一组内容,这里我以 dlv为例解释下:
如上图所示,dlv在下载时会有一系列的参数指令,我们只需要关注cmd指令就可以了,即红色框框住的指令:go install -v github.com/go-delve/delve/cmd/dlv@latest
这个就是我们一会手动要在cmd中敲进去的下载dlv 这个工具的指令:
然后就会下载,就OK了,下载到的位置也可以查看到:首先通过在cmd中输入指令:go env GOPATH 得到GO的路径,然后进入对应路径文件夹,有一个bin目录,下面就是我刚下载的几个tools
Step(3) : 记得最后将gomodule管理器重置为off,否则可能会出现奇怪错误
这个步骤存疑,因为我没关也没出啥错误,但是还是建议关闭一下
在cmd中敲入如下指令:
go env -w GO111MODULE=off
可能出现的错误是:运行任何代码都会提示缺 main.go: