1. 程式人生 > 其它 >GO中的包管理

GO中的包管理

技術標籤:GOgolang

我們知道,程式是可以通過封裝來提高程式碼的複用性。那麼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 // 校驗依賴