go get 獲取被牆依賴包解決方法

前言:git

隨着 go1.11 的發佈,go 官方引入了 go module 來解決依賴管理問題,go module 被集成到原生的 go cmd 中,可是若是你的代碼庫在$GOPATH中,go1.11 的 module 功能是默認不會開啓的,想要開啓也很是簡單, 經過一個環境變量便可開啓go module:export GO111MODULE=ongithub

 

關於 $GOPROXYgolang

當咱們使用go的時候,go默認會直接從代碼庫中去下載所需的相關依賴,GOPROXY 這個環境變量可讓咱們控制本身從哪裏去下載源代碼,若是 GOPROXY 沒有設置,go 會直接從代碼庫下載相關依賴代碼。若是你像下面這樣設置了這個環境變量,那麼你就會經過 goproxy.io 下載全部的源代碼。 安全

export GOPROXY=https://goproxy.io設計

你能夠經過置空這個環境變量來關閉,export GOPROXY= 。code

之前你們執行 go get golang.org/x/net net代碼庫會下載到本地GOPATH中,之後有任何項目引用到了 golang.org/x/net 都不會再去下載這個代碼庫,由於本地GOPATH已經有了,哪怕版本不對,golang也會引用。可是隨着 module 概念引入go語言,每一個引入的 module 擁有了 version。隨着代碼庫的不斷更新迭代,你們即便是對同一個代碼庫的引用也可能用了不一樣的tag 或者 commit hash,基於這個現狀,go1.11 的 module 會比之前更頻繁的下載源代碼。可是基於中國有中國特點的互聯網,咱們有時候很難get到咱們須要的依賴源代碼,進而致使項目編譯失敗,CI失敗。因而,咱們須要一個proxy。ip

goproxy.io部署

goproxy.io 是一個開源項目,當用戶請求一個依賴庫時,若是它發現本地沒有這份代碼就會自動請求源,而後cache到本地,用戶就能夠從 goproxy.io 請求到數據。固然,這些都是在一個請求中完成的。goproxy.io 只支持 go module 模式。當用戶執行 go get 命令時,會去檢查$GOPROXY//@v/list這個文件中是否有用戶想要獲取的版本,若是有,就依次獲取 $GOPROXY//@v/.info、$GOPROXY//@v/.mod、$GOPROXY//@v/.zip 等文件,若是沒有就直接從源碼庫中去下載。get

得益於 go module 在設計的時候很是重視安全這個領域,因此在啓用了 go module 後,你會發現除了 go.mod 這個文件以外,還有一個 go.sum 文件,這個文件保存了每一個依賴庫的對應的hash值,來保證下載回來的代碼庫是正確的,不被人篡改的。同時, goproxy.io 也是個開源的項目。能夠自行部署到本身的IDC中,由於公司內部本身的代碼庫 goproxy.io 是沒法訪問到的。開源地址:cmd

https://github.com/goproxyio/goproxy

References:

https://goproxy.io

https://github.com/goproxyio/goproxy

https://research.swtch.com/vgo-intro

https://docs.gomods.io

相關文章
相關標籤/搜索