golang unrecognized import path "golang.org/x/net" 完美解决方案

报错复现

dev$ go get -v golang.org/x/net
Fetching https://golang.org/x/net?go-get=1
https fetch failed: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: i/o timeout
package golang.org/x/net: unrecognized import path “golang.org/x/net” (https fetch: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

简述

如果只有少数的几个包依赖,可以使用 github.com/golang/net 之类的库来代替。但是在go module模式下,会出现同样的包的多个版本同时使用的情况。如果引入的框架使用了多个基础包,使用替代方式或者go mod replace的方式来解决简直是一场灾难。

解决方案

本质上go获取包的时候有两个步骤,下面针对这两个步骤分别处理。
2019.09.02更新
只需要配置GOPROXY变量即可,不需要http层面配置代理。

http层面增加代理

添加如下环境变量,来解决https fetch failed问题

$ export http_proxy=socks5://127.0.0.1:1080		// 梯子的本地端口
$ export https_proxy=$http_proxy

go get层面增加代理

go 1.11版本新增了 GOPROXY 环境变量,go get会根据这个环境变量来决定去哪里取引入库的代码

$ export GOPROXY=https://goproxy.io

其中,https://goproxy.io 是一个goproxy.io这个开源项目提供的公开代理服务。

参考

https://shockerli.net/post/go-get-golang-org-x-solution/
http://www.topcaver.com/go-get-through-socks5-proxy

你可能感兴趣的:(golang)