「Go」Go語言之依賴管理

不積跬步,無以至千里;不積小流,無以成江海。

碼字不易,點贊再看。

Go語言的依賴管理隨著版本的迭代正逐漸完善起來。

依賴管理

常見的包管理有,dep、go vendor、glide、go modules 等。過時的東西就不再去研究。

這裡主要說一下 go modules,go modules是Go1.11版本之後 官方推出的版本管理工具,並且從 Go1.13 版本開始,go modules將是Go語言默認的依賴管理工具。

GO111MODULE

要啟用go modules 支持首先要設置環境變量 GO111MODULE(通過go env看), 通過它可以 開啟 或 關閉 模塊支持,它有三個可選值:off、on、auto,默認值 是auto。

  1. GO111MODULE=off 禁用模塊支持,編譯時會從GOPATH和vendor文件夾中查找包。
  2. GO111MODULE=on啟用模塊支持,編譯時會忽略GOPATH和vendor文件夾,只根據 go.mod下載依賴。
  3. GO111MODULE=auto,當項目在$GOPATH/src外且項目根目錄有go.mod文件時,開啟模塊支持。

簡單來說,設置GO111MODULE=on之後就可以使用go module了,以後就沒有必要 在GOPATH中創建項目了,並且還能夠很好的管理項目依賴的第三方包信息。 使用 go modules 管理依賴後會在項目根目錄下生成兩個文件 go.mod

和 go.sum。

GOPROXY

Go1.11之後設置GOPROXY命令為:

export GOPROXY=https://goproxy.cn

Go1.13之後GOPROXY默認值為 https://proxy.golang.org,在國內是無法訪 問的,所以十分建議大家設置GOPROXY,推薦使用 goproxy.cn。

go env -w GOPROXY=https://goproxy.cn,direct

go mod

常用的go mod 命令

  • go mod download 下載依賴的module到本地cache(默認為$GOPATH/pkg/mod目錄)
  • go mod init 初始化當前文件夾, 創建go.mod文件
  • go mod tidy 增加缺少的module,刪除無用的module
  • go mod vendor 將依賴複製到vendor下
  • go mod graph 打印模塊依賴圖

  • go mod edit 編輯go.mod文件
  • go mod verify 校驗依賴
  • go mod why 解釋為什麼需要依賴
go.mod

go.mod 文件記錄了項目所有的依賴信息,其結構大致如下:


「Go」Go語言之依賴管理

其中,

  • module 用來定義包名
  • require 用來定義依賴包及版本
  • indirect 表示間接引用
replace

在國內訪問golang.org/x的各個包都需要翻牆,你可以在go.mod中使用replace 替換成github上對應的庫。


「Go」Go語言之依賴管理

go mod edit

格式化

因為我們可以手動修改go.mod文件,所以有些時候需要格式化該文件。

Go提供了一下命令:

go mod edit -fmt

添加依賴項

go mod edit -require=golang.org/x/text

移除依賴項

如果只是想修改go.mod文件中的內容,那麼可以運行go mod edit -droprequire=package path,比如要在go.mod中移除golang.org/x/text包,可以使用如下命令:

go mod edit -droprequire=golang.org/x/text

go Modules 使用

已有項目

如果需要對一個已經存在的項目啟用go module,可以按照以下步驟操作:

在項目目錄下執行go mod init,生成一個go.mod文件。 執行go get,查找並記錄當前項目的依賴,同時生成一個go.sum記錄每個依賴庫的版本和哈希值。

新項目

對於一個新創建的項目,我們可以在項目文件夾下按照以下步驟操作:

執行go mod init 項目名命令,會自動在當前項目文件夾下創建一個go.mod文件。


手動編輯go.mod中的require依賴項或執行go get自動發現、維護依賴。

實戰

在 GOPATH 之外的地方,新建一個空文件夾 go-study。

cd go-stydy && go mod init go-study

輸出:

go: creating new go.mod: module go-stydy

這時目錄中多一個 go.mod 文件,內容如下:

<code>module 

go

-study

go

1.13

/<code>

接下來我們新建 main.go,添加下官方的例子


「Go」Go語言之依賴管理

下載依賴包。

go mod tidy

執行完成後,看一下 go.mod 文件:

<code>

module

go-study

go

1.13

require

github.com/gin-gonic/gin v1.6.2

/<code>

看到新增一個 gin v1.6.2 的包。

還生成了一個 go.sum 的文件,記錄每個依賴庫的版本和哈希值,可以打開看一下。

執行看效果

控制檯 輸入 go run main.go

瀏覽器輸入:localhost:9999/ping

看到瀏覽器有json輸出 {"message":"pong"}

疑問:

  1. 目錄中沒發現 gin 包,包下載到哪了?

在 GOPATH/pkg/mod 目錄中。

2.GoLand 編輯器中關於 Gin 的引用變紅了?

可以通過編輯器設置


「Go」Go語言之依賴管理


點關注 不迷路

如果你從本篇內容有收穫,求 點贊,求 關注,求 轉發 ,讓更多的人學習到。

如果本文有任何錯誤,請批評指教,不勝感激 !


分享到:


相關文章: