国内的Go开发已然蔚然成风,但是Go开发者比较痛苦的是,golang.org网站以及其它的一些相关的开发网站被GFW屏蔽了。下载Go开发包海容易些,国内有一些镜像站点,或者通过一些代理也能访问,但是下载一些开发库的时候,这些库可能直接或者间接引用了 `golang.org/x/...`等依赖库, 通过 go get
命令确没有办法下载下来。
我原先在Comcast,这是一家外企,在国内有vpn可以直接访问这些网站,所以以前没有觉得 go get
是一个问题,看到大家被GFW弄的焦头烂额的时候也没觉得是一件大事情,现在换到国内的互联网企业,切切实实的感觉到GFW的威力。首先是google.com, golang.org等网站被屏蔽掉了,其次 go get
一些库如 golangorg/x/net
失败。
总得想些办法吧。如果有自己的VPN的话,应该比较好的解决,我没有,不过我比较熟悉的是shadowsocks,所以基于shadowsocks想了一些办法,总算能正常的下载了,本文纪录一下这曲折的过程。
shadowsocks的安装和使用我就不说了,请自行搜索。Shadowsocks虽然能访问一些屏蔽的站点比如golang.org,但是它基于socks5协议,对于 go get
来说,依然不可用。
下一步就是想办法将socks5代理转为http代理了。
一个方法如 mac下宿主机和docker内go get代理设置 一文中介绍的privoxy,不过我没有试成功。
另一个方法是实用 cow , 这是shadowsocks-go作者的另一个开发项目,根据项目介绍很容易的配置,可以在本机启动一个http代理,以shadowsocks为二级代理。
listen = http://127.0.0.1:7777 proxy = socks5://127.0.0.1:1080
然后设置环境变量,就可以 go get
被屏蔽的库了。
export http_proxy=http://127.0.0.1:7777 export https_proxy=http://127.0.0.1:7777
如果没有代理,而你又需要 golang.org/x/...
的包,你可以手工在你的GOPATH下创建这些目录,然后 git clone github.com/golang/xxx
相应的目录即可(xxx替换成泥需要的库,比如net)。