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:

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: