天朝局域网内go get的正确姿势

前言

Golang获取包最简单的方法就是直接执行go get xxxx,与此同时,这也是Golang被诟病很多的一点 非常不利于版本管理 个人的工作环境可能会因为引包不对而被污染 所以后来就有了govendor gopm 等关于go的包管理器 。当然 这不是今天要说的内容。今天要说的是关于墙的解决方案 .很多Golang开发者大多会遇到这个问题:go get 包的时候会卡死 或是直接超时 因为我们伟大的防火墙的存在 很多包都是不能直接获取的。。然后 有人会用Shdowsocks + proxychains/proxychains-ng 作为Terminal xx 的工具 配置好之后 经过测试发现proxychains能用 但是go get 还是卡死了。这个事情已经有中国开发者在Github上对Go Team提问过了,Go Team的反馈是不能单单为了中国改变go get的实现模式,详情issue请戳这里

polipo

关于polipo

Polipo 可以把Socks Proxy -> HTTP Proxy

0x00: 安装&&配置

  • Ubuntu及其衍生版下可以使用 sudo apt-get install polipo
  • /etc/polipo下找到config的配置文件 ,配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# This file only needs to list configuration variables that deviate
# from the default values. See /usr/share/doc/polipo/examples/config.sample
# and "polipo -v" for variables you can tweak and further information.
logSyslog = true
logFile = /var/log/polipo/polipo.log
proxyAddress = "0.0.0.0"
socksParentProxy = "127.0.0.1:1080"
socksProxyType = socks5
proxyAddress = "::0" # both IPv4 and IPv6
chunkHighMark = 50331648
objectHighMark = 16384
serverMaxSlots = 64
serverSlots = 16
serverSlots1 = 32
proxyPort = 8123
  • 然后 执行 sudo polipo -c /path/to/polipo/config (/path/to 为polipo父目录)

  • 开启 Http Proxy sudo polipo socksParentProxy=localhost:1080

    此步建议在第二步做 :)。

0x01 测试 使用

  • 加上http(s)_ proxy来获取包 http(s)_proxy=http://127.0.0.1:8123 go get -v -u github.com/xxx/xxx
  • OR
    1
    2
    3
    $ export http_proxy=http://127.0.0.1:8123
    $ export https_proxy=$http_proxy
    $ go get -u -v github.com/xxx/xxx/

不怎么优雅的姿势

  • 从国内的镜像站(例如 gopm.io)下下来之后 再通过go install来安装包 但是这样会丢失git记录 不方便包的更新。

  • 直接git clone 到本地.

  • 通过Shadowsocks + proxychains4 + govendor 的方式来获取包因为用到的东西 比较麻烦 所以也不是怎么优雅吧 但是强烈建议用类似govendor的包管理工具来进行golang package的管理!

Reference