Golang Go语言中我的机器上 go get 指令一直报握手错误。从下午查到晚上还不知道啥问题

发布于 1周前 作者 bupafengyu 来自 Go语言

Golang Go语言中我的机器上 go get 指令一直报握手错误。从下午查到晚上还不知道啥问题

go get -v golang.org/x/tools/gopls go: github.com/gin-gonic/[email protected]: Get “https://goproxy.cn/github.com/gin-gonic/gin/@v/v1.6.3.mod”: net/http: TLS handshake timeout

我用 curl 试下了也可以 curl -k --tlsv1 https://goproxy.cn/github.com/gin-gonic/gin/@v/v1.6.3.mod module github.com/gin-gonic/gin

go 1.13

require ( github.com/gin-contrib/sse v0.1.0 github.com/go-playground/validator/v10 v10.2.0 github.com/golang/protobuf v1.3.3 github.com/json-iterator/go v1.1.9 github.com/mattn/go-isatty v0.0.12 github.com/stretchr/testify v1.4.0 github.com/ugorji/go/codec v1.1.7 gopkg.in/yaml.v2 v2.2.8 )

我搜到一个答案是本地设置把 https 代理设置错了。我现在本地就没设置代理 env|grep proxy GOPROXY=https://goproxy.cn,direct

这种情况怎么办呢?现在是 go mod,go get 都用不了


更多关于Golang Go语言中我的机器上 go get 指令一直报握手错误。从下午查到晚上还不知道啥问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

50 回复

你的时间对不。

更多关于Golang Go语言中我的机器上 go get 指令一直报握手错误。从下午查到晚上还不知道啥问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


设置代理不香吗?我本地不设置代理就是连接失败。

可能是对方服务器有问题或者你的机器时间有问题

Get “https://goproxy.cn/github.com/gin-gonic/gin/@v/v1.6.3.mod”: net/http: TLS handshake timeout

我设置了代理,我的代理服务器是日本的。所以就直连了。
GOPROXY=direct go mod download
go: github.com/gin-gonic/[email protected] requires
gopkg.in/[email protected]: unrecognized import path “gopkg.in/yaml.v2”: https fetch: Get “https://gopkg.in/yaml.v2?go-get=1”: net/http: TLS handshake timeout
还是报错


https://goproxy.cn/github.com/gin-gonic/gin/v/v1.6.3.mod 这个 Url 我可以直接从浏览器打开的,应该不是对方服务器的问题。
我本地 date
2020 年 7 月 7 日 星期二 11 时 01 分 34 秒 CST

时间也没问题吧

Check 一下 http(s) proxy ? env | grep -i proxy 看看有没有设置 HTTP_PROXY 之类的

拨了味屁恩? 这是 TLS 被 GFW 干了吧。

go env 看一下,估计是那点没有配置对 ,GO111MODULE=on 有没有设置,对着 https://goproxy.cn/ 在配置一遍

首先先记住一点国内 go package 网站是被墙的,所以必须配置代理

如果配置了代理:看看 go env 返回的代理对不对
如果没配置代理:设置 GOPROXY 变量

Go 不会遵从系统代理(除非使用 Surge 增强模式或者其他类似的工具),必须利用 GOPROXY 配置

返回结果是这个
GOPROXY=goproxy.io
没有配代理

  1. 现在建议用 go env -w xxx=xxx 写环境变量
    2. 项目没 go.mod 时候 goproxy 设置了也没用
    3. 用了 goproxy 最好别用代理,尤其.cn 我有几个节点就连不上
    4. 如果是加依赖这年头不用 get,vet 或者 build 的时候自己会加上并 download


我现在用 vscode,得用 go get 下载插件。主要我这个错误和被墙的错误不一样。
我同事被墙了会报 io timeout 。我的这个错误就是握手,就很邪门儿。

你 git 没有设置代理吧

使用代理,或者用 github 上的代替,或者手动下载。

vscode 里设置启用 go proxy 了吗

不设代理,用 proxifier 直接下

我是直接命令行下载的

我自己有代理,用代理下的时候也是握手错误

握手……用 tcpdump 弄出来搁 wireshark 里看看,跟 browser 的握手包对比下? https://stackoverflow.com/a/56852076/8553479

我亲身遇到过最离谱的情况是网卡坏了,下载能满速,上传就 0.几 kb,我还以为 IT 给我设规则了,那时候网络请求库也是报握手错误,建议排查下硬件问题。

用插件里 go language server,也没必要 get

用 proxychains-ng,你这个就是被墙了

看一下是不是配置了 proxy



我用了 proxychains-ng,感觉应该连上 goproxy.cn 了,还是握手错误

我这应该不是这种情况,我现在能正常上网,代理也正常使用,就是 go get/go mod 用不了

我现在是 go mod 也用不了。

go get 应该是对 git 的封装,看看 git clone 能不能正常工作

这里大家说的的代理和你的 socks 代理并不是同一种代理

git 可以正常使用

就两种代理啊,一种是 goproxy,一种是本地的代理,

我的意思是说用了 proxychains4 后就不用 goproxy 了,或者:

liuxu:~$ export GOPROXY=https://athens.azurefd.net/

这是我以前用的,不知道现在还有没有效果,或者其他第三方:

https://goproxy.io/zh/

proxychains 不是靠劫持动态链接库吗,对 go 这种静态链接的程序管用?

不折腾,直接用的上网工具开全局就完事了

我一般直接切全局,不为这种事情浪费时间。

#27 你代理的问题,不要用代理。

应该是不管用的,我已经好久没用过 proxychains-ng 了

用 http 的途径去 git clone,你图中走的是 ssh

哦,好像是的,之前弄了好久,最后用的 GOPROXY

linux 怎么切全局,好像只能 iptables 或者路由器处理

昨天我就配过,之前下载了是旧版本的 go,无论怎样设置都报错
然后下载了最新版本的二进制包,然后配置
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

go get 一切正常

我的环境可以科学上网

搞个华硕或者网件路由器,刷梅林,最好的上网方案

可以的。
git clone https://github.com/docker-library/golang.git
Cloning into ‘golang’…
remote: Enumerating objects: 81, done.
remote: Counting objects: 100% (81/81), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 3598 (delta 29), reused 65 (delta 20), pack-reused 3517
Receiving objects: 100% (3598/3598), 465.10 KiB | 26.00 KiB/s, done.
Resolving deltas: 100% (1748/1748), done.

问题是全局也不行。。。现在就是开代理也不行,不开代理也不行。一直报握手错误


go version
go version go1.14.4 darwin/amd64

目前还能遇到这个问题。
梯子全局不全局都不行。
我遇到的主要是 verify 的时候:
go get: gorm.io/[email protected]: verifying module: gorm.io/[email protected]: Get “https://sum.golang.google.cn/lookup/gorm.io/[email protected]”: net/http: TLS handshake timeout

针对您提到的 go get 指令在 Go 语言中一直报握手错误的问题,这通常与网络连接或 SSL/TLS 配置有关。以下是一些可能的解决步骤:

  1. 检查网络连接: 确保您的机器可以正常访问外部网络,特别是 Go 模块的源(如 GitHub)。可以尝试使用 pingcurl 命令测试网络连接。

  2. 检查 Go 代理设置: 如果您使用了 Go 代理(如 GOPROXY),请确保其配置正确。可以尝试暂时禁用代理(将 GOPROXY 设置为空)来看是否解决问题。

  3. 更新 Go 版本: 确保您使用的 Go 版本是最新的,或者至少是一个稳定的版本。老版本的 Go 可能存在已知的 SSL/TLS 问题。

  4. 检查 SSL/TLS 配置: 如果您的系统或网络有特殊的 SSL/TLS 配置(如自定义的 CA 证书),请确保 Go 运行时能够正确加载这些配置。可以通过设置 GOROOTCGO_CFLAGS 等环境变量来指定 CA 证书路径。

  5. 查看错误日志: 详细查看 go get 输出的错误日志,可能会有更具体的错误信息或提示。

  6. 尝试其他网络环境: 如果可能,尝试在不同的网络环境下运行 go get,以排除是特定网络环境的问题。

如果上述步骤都无法解决问题,建议查阅 Go 社区或相关论坛,看看是否有其他开发者遇到并解决了类似的问题。

回到顶部