「 Golang team在二月末發佈了1.12版本,而athens也在3月初發布了v0.3.0版本,新一代的go語言包管理生態體系初見雛形**」**git
最近被glide折騰的生不如死,下載牆外的包的時候就像段譽的六脈神劍同樣,時靈時不靈,剛好此時go 1.12發佈而且背靠微軟的 go module 代理實現 athens發佈了0.3.0的更新,爲了早日擺脫glide,特對go module和athens作了可用性調研。github
01golang
—docker
go modulebash
go 1.11 試驗性的引入了go module的概念,初步解決了go語言包管理的難題,talk is cheap, show me the code.服務器
咱們新建一個項目 test,test建立了一個grpc客戶端並作了一個簡單的rpc調用curl
$ mkdir test && cd test
複製代碼
package main
複製代碼
使用go mod init test命令,會在當前目錄下面建立一個go.mod文件ide
# philchia @ philchia in ~/test [22:36:31]
複製代碼
go.mod中聲明瞭模塊的名稱和當前模塊構建時使用的go版本gitlab
google.golang.org/grpc 這個包由於某些緣由通常是直接下載不了的,這裏咱們藉助設置 GOPROXY=https://goproxy.io 使用 go module的download protocol來經過一個代理來獲取咱們的依賴ui
$ GO111MODULE=on GOPROXY=https://goproxy.io go get google.golang.org/grpc
複製代碼
go: finding google.golang.org/grpc v1.19.0
複製代碼
這樣咱們的依賴就都下載好了,能夠看到多了一個go.sum文件,go.mod文件的內容也發生了改變
$ cat go.mod
複製代碼
嘗試編譯咱們的main.go
$ go build main.go
複製代碼
bingo! 編譯成功
02
—
athens
使用 goproxy.io 這樣公共的go module 代理當然能夠解決牆外依賴包下載的問題,然而當咱們的依賴是放在自建gitlab的私有庫內,普通的 go module 代理是沒有辦法的,這裏就要隆重介紹 athens,athens是一個有微軟參與和貢獻代碼的開源go module代理服務。
athens實現了go module download protocol, 而且支持從私有庫拉取包。利用docker,能夠很是方便的建立一個athens代理服務器。
首先建立兩個目錄,分別用於存放.netrc文件和做爲go module代理的存儲
$ pwd
複製代碼
建立一個.netrc文件,寫入咱們私有庫的地址和用戶名密碼
$ cd athens-netrc
複製代碼
啓動 athens 容器
docker run -d -v /Users/goheart/athens-netrc:/root -v /Users/goheart/athens-storage:/var/lib/athens -e ATHENS_NETRC_PATH=/root/.netrc -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens -e ATHENS_STORAGE_TYPE=disk --name athens-proxy --restart always -p 3000:3000 gomods/athens:latest
複製代碼
訪問 http://localhost:3000 檢查容器是否啓動成功
curl http://localhost:3000
複製代碼
配置使用咱們本地的athens代理
$ export GOPROXY=http://locaohost:3000
複製代碼
這樣咱們就可使用代理服務器來導入私有庫中的依賴了One more thing 在沒有使用go module的時候,若是在github上fork別人的代碼,你本身的分支代碼裏面的import path有時候會帶有原代碼庫的代碼path,使得go代碼庫對fork的支持很很差,有了gomodule以後,咱們代碼的import path能夠不用包括hostname和github的username, 能夠完美支持fork的代碼庫
本文來源:Go語言之心
關注和喜好前沿&有趣開發技術,加入**【Hello World!曉代碼】**