GO中的包管理
我們知道,程式是可以通過封裝來提高程式碼的複用性。那麼GO就是可以通過包管理的機制來管理程式碼。
Go Modules於Go語言1.11版本時引入,在1.12版本正式支援,是由Go語言官方提供的包管理解決方案。Modules是相關Go包的集合,是原始碼交換和版本控制的單元。go命令直接支援使用Modules,包括記錄和解析對其他模組的依賴性
設定環境變數
首先需要設定環境變數,可以使用go env命令檢視當前配置。
$ go env
GO111MODULE="auto"
GOPROXY="https://proxy.golang.org,direct"
GONOPROXY=""
GOSUMDB="sum.golang.org"
GONOSUMDB=""
GOPRIVATE=""
如果需要更改 GO111MODULE ,可以使用go env命令
go env -w GO111MODULE=on
其中:
-
GO111MODULE
auto:只要專案包含了 go.mod 檔案的話啟用 Go modules,目前在 Go1.11 至 Go1.14 中仍然是預設值。
on:啟用 Go modules,推薦設定,將會是未來版本中的預設值。
off:禁用 Go modules,不推薦設定。 -
GOPROXY
此環境變數主要用於設計Go Module的代理 -
GOSUMDB
此環境變數用於在拉取模組的時候保證模組版本資料的一致性。
初始化
Go Modules的使用方法比較靈活,在目錄下包含go.mod檔案即可
首先通過如下命令建立一個新的Module,然後當前目錄會生成go.mod檔案。
go mod init [module name]
Go Modules會自動管理包,如果需要引入依賴,只需要在go.mod下新增以下內容(以gorose為例子)
module ModuleName require ( github.com/gohouse/gorose v1.0.5 )
go get的使用
go get 命令用於拉取新的依賴,以下為go get命令具體用法:
引數的表示
-d 只下載不安裝
-f 只有在你包含了 -u 引數的時候才有效,不讓 -u 去驗證 import 中的每一個都已經獲取了,這對於本地 fork 的包特別有用
-fix 在獲取原始碼之後先執行 fix,然後再去做其他的事情
-t 同時也下載需要為執行測試所需要的包
-u 強制使用網路去更新包和它的依賴包
-v 顯示執行的命令
常用命令
go mod init // 初始化go.mod
go mod tidy // 更新依賴檔案
go mod download // 下載依賴檔案
go mod vendor // 將依賴轉移至本地的vendor檔案
go mod edit // 手動修改依賴檔案
go mod graph // 檢視現有的依賴結構
go mod verify // 校驗依賴