iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0

Go Modules

為了解決 go@1.11 前,程式運行被限制於 GOPATH/src 下相依與編譯問題,套件相依管理 go modules 誕生了。先前提到 便是 Go Modules 是否啟用的環境設定值,可分為 on, off, auto 三種。

  • on : 固定啟用 Go Modules ,在進行套件相依時會從 GOPATH/pkg/ 下查找
  • off : 固定停用 Go Modules ,在進行套件相依時會從 GOPATH/src/ 下查找
  • auto : Default setting 會依據你執行 go run or go build 等命令時的位置決定是否啟用 Go Modules ,若執行位置不在 GOPATH/src/ 下且目錄裡存在 go.mod 會啟用 Go Modules

Dependency Management

Golang 專案架構的構築,在某種程度上可以視為 package 的堆疊,若是在多人共同開發的情況下(而且尚未導入CI/CD),團隊成員在本地環境進行編譯,就有可能產生相依套件版本不一致的情形,更糟的是我們可能還不知道哪一個相依版本才是我們想要的,此時 Go Modules 可以解決我們的困擾。

  • 我們在 test 目錄下試試

    > export GO111MODULE=on
    
    > go mod init
    
  • 產出的 go.mod

    module test //module path
    go 1.15 //go version 
    
  • 套件引用

    > go get github.com/bwmarrin/snowflake
    
    go: github.com/bwmarrin/snowflake upgrade => v0.3.0
    
  • 版本相依後 go.mod

    module test
    
    go 1.15
    
    require github.com/bwmarrin/snowflake v0.3.0 // indirect
    

截至目前為止我們引用了 github.com/bwmarrin/snowflake 這個套件,並且將這個相依的資訊透過 go.mod 記錄下來。我們進行了一次最簡單的相依控管,下一個使用這個專案的團隊成員,即便在 snowflake 這個套件已經更版至 v1.0.0 時,也不會任意的更動套件裡的相依版號。

  • 更版

    > go get github.com/bwmarrin/snowflake@v0.2.0
    
    go: downloading github.com/bwmarrin/snowflake v0.2.0
    
  • 異動紀錄 go.sum

    github.com/bwmarrin/snowflake v0.2.0 h1:ldmIc3BQbp6iBoMeAB5BC5lz0NLsYfoNXnFs/fbk62I=
    github.com/bwmarrin/snowflake v0.2.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
    github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
    github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
    

若要針對特定版號相依,可以透過 git tag 的方式抓取想要的版本 ,並且會被記錄於 go.sum 中留存。最後我們回顧一下上一篇提到的 /pkg 資料夾,在 GO111MODULE=on 的狀況下我們 go get 了不同版本的相同套件,可以在 GOPATH/pkg/mod/ 下找到他們。

> ll $GOPATH/pkg/mod/github.com/bwmarrin

total 0
dr-x------  7 wesley  staff   224B  9 10 21:44 snowflake@v0.2.0
dr-x------  7 wesley  staff   224B  4 23 11:49 snowflake@v0.3.0

上一篇
Day5 Basic Go (Install & GOPATH)
下一篇
Day7 Basic Go (Run, Syntax, Struct)
系列文
Go Distributed & Go Consistently30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言