Golang 環境搭建的小技巧:讓 go get 基於 socks5 進行代碼包遠程導入

令 Golang 開發者最痛苦事情之一便是在國內無法直接使用go get命令更新 golang.org 以及 gopkg.in 的 package。目前,大家使用 socks5 比較多,但是如果不進行設置, go get是無法與 socks5 配合工作的。本文簡述一種基本的方法。

0x01 大致瞭解下原理

本質上來講,go get命令所做的動作也被叫做代碼包遠程導入。go get命令可以從任何命令支持的代碼版本控制系統(Version Control System,簡稱爲VCS)檢出代碼包。

而其所支持的 VCS 的信息如下:

  • Mercurial(hg)
  • Git(git)
  • Subversion(svn)
  • Bazaar(bzr)

因此,go get在代碼包導入時,首先會判斷該遠程包使用什麼 VCS 進行管理,再使用對應的源碼工具進行導入。

例如,當我們需要執行go get golang.org/x/crypto時,大致上會分爲兩步執行:

  1. 先訪問 https://golang.org/x/crypto?go-get=1 來獲取 VCS 的類型,得到答案是Git
  2. 再通過具體的 VCS 的源碼工具命令 git clone https://golang.org/x/crypto進行代碼包遠程導入

因此,我們要同時解決上述兩步的問題,才能讓 go get基於 socks5 進行代碼包遠程導入。

0x02 解決命令行 http/https 訪問的方法

set http_proxy=socks5://127.0.0.1:1080
set https_proxy=socks5://127.0.0.1:1080

注:1080 端口爲 ShadowSocks 默認端口

0x03 解決VCS 的源碼工具訪問的方法

根據 Golang 官方 Wiki 提供的方法的先配置源碼工具的代理問題,如 Git 的配置爲:

$ git config [--global] http.proxy http://proxy.example.com:port

其他 VCS 的配置方法詳見:https://github.com/golang/go/wiki/GoGetProxyConfig

0x04 最終的解決方案

上述兩步其實有冗餘,經過整合,最終方案如下:

set http_proxy=socks5://127.0.0.1:1080
set https_proxy=socks5://127.0.0.1:1080

go get -u -v your.package.name

注:1080 端口爲 socks5 默認端口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章