天天看點

Go構模組化式:GOPATH、vendor、Go Module

GOPATH構模組化式

GOPATH預設路徑是​

​$HOME/go​

​​。

GOPATH構模組化式下,編譯器會在GOPATH路徑下搜尋第三方子產品,不關心第三方包版本。為了可重構,引入了vendor機制。

Go Module構模組化式(推薦)

通過環境變量​

​GO111MODULE​

​​設定為​

​on​

​​打開Go Module構模組化式(Go 1.11版本引入此模式)。

建立​​

​Go Module​

​​,需要三步:

1、執行​​

​go mod init​

​​ 建立 ​

​go.mod​

​​ 檔案,初始化項目。

2、執行​​

​go mod tidy​

​​ 指令自動更新目前module的依賴資訊。

3、執行 ​​

​go build​

​​,建構module。

Go Module采用語義導入版本 (Semantic Import Versioning),以及和其他主流語言不同的最小版本選擇 (Minimal Version Selection) 等機制。

添加依賴

go get github.com/google/uuid      

執行指令會下載下傳依賴到本地module緩存裡,并在 ​

​go.mod​

​​ 檔案的 require 段中新增一行依賴内容。

也可以用批量處理的方式​​

​go mod tidy​

​,自動把源碼裡的依賴下載下傳下來。

更新 / 降級依賴的版本

降級:

$go get github.com/sirupsen/[email protected]
go: downloading github.com/sirupsen/logrus v1.7.0
go get: downgraded github.com/sirupsen/logrus v1.8.1 => v1.7.0      

上面指令下載下傳了v1.7.0版本,并把依賴項從 v1.8.1 降至 v1.7.0版。

還可以用edit和tidy結合使用,實作同樣功能:

$go mod edit -require=github.com/sirupsen/[email protected]
$go mod tidy       
go: downloading github.com/sirupsen/logrus v1.7.0      

更新:

$go get github.com/sirupsen/[email protected]
go: downloading github.com/sirupsen/logrus v1.7.1
go get: upgraded github.com/sirupsen/logrus v1.7.0 => v1.7.1      

添加主版本号大于 1 的依賴

$go get github.com/go-redis/redis/v7
go: downloading github.com/go-redis/redis/v7 v7.4.1
go: downloading github.com/go-redis/redis v6.15.9+incompatible
go get: added github.com/go-redis/redis/v7 v7.4.1      

移除依賴

使用vendor

# 在vendor目錄下建立依賴包副本
# 用vendor/modules.txt記錄依賴包及版本
go mod vendor

# Go 1.14之後,預設也是vendor模式建構
go build -mod=vendor      

繼續閱讀