升級Go新版本,用go.mod 擺脫GOPATH的包管理束縛吧!

image.png

 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語言之心

Go語言之心

關注和喜好前沿&有趣開發技術,加入**【Hello World!曉代碼】**

Hello World! 曉代碼公衆號
相關文章
相關標籤/搜索