解决go get无法获取golang.org的包的问题

由于国内被墙导致无法获取。所以go get获取包的时候会出现超时错误,就像我这次碰到的:

➜  vishnu git:(master) ✗ go get github.com/kataras/iris
package golang.org/x/sys/unix: unrecognized import path "golang.org/x/sys/unix" (https fetch: Get https://golang.org/x/sys/unix?go-get=1: dial tcp 103.7.200.79:443: i/o timeout)  

解决方案

你首先得有个能够(尼)翻(玛)墙的代理地址,我这里用的是Lantern,他的http代理端口是8787。

go get设置代理,需要添加http_proxy等环境变量

修改~/.bashrc添加以下配置后,在source ~/.bashrc就可以了:

export http_proxy=http://localhost:8787  
export https_proxy=$http_proxy  
export ftp_proxy=$http_proxy  
export rsync_proxy=$http_proxy  
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"  

此外git也需要配置代理:

git config --global https.proxy http://127.0.0.1:8787  
git config --global https.proxy https://127.0.0.1:8787  

如果要取消代理设置,则执行

git config --global --unset http.proxy  
git config --global --unset https.proxy  

查看已经设置的值:git config http.proxy

关于go get

参数说明:

-d 只下载不安装 
-f 只有在你包含了-u参数的时候才有效,不让-u去验证import中的每一个都已经获取了,这对于本地fork的包特别有用 
-fix 在获取源码之后先运行fix,然后再去做其他的事情 
-t 同时也下载需要为运行测试所需要的包 
-u 强制使用网络去更新包和它的依赖包 
-v 显示执行的命令 

我们使用go get下载包时,最好使用-u -v参数,-v可以参看下载的其他依赖包,便于我们定位是哪个包出的问题,如:

go get -v -u github.com/kataras/iris