不積跬步,無以至千里;不積小流,無以成江海。
碼字不易,點贊再看。
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。
- GO111MODULE=off 禁用模塊支持,編譯時會從GOPATH和vendor文件夾中查找包。
- GO111MODULE=on啟用模塊支持,編譯時會忽略GOPATH和vendor文件夾,只根據 go.mod下載依賴。
- 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 文件記錄了項目所有的依賴信息,其結構大致如下:
其中,
- module 用來定義包名
- require 用來定義依賴包及版本
- indirect 表示間接引用
replace
在國內訪問golang.org/x的各個包都需要翻牆,你可以在go.mod中使用replace 替換成github上對應的庫。
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>modulego
-studygo
1.13
/<code>
接下來我們新建 main.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"}
疑問:
- 目錄中沒發現 gin 包,包下載到哪了?
在 GOPATH/pkg/mod 目錄中。
2.GoLand 編輯器中關於 Gin 的引用變紅了?
可以通過編輯器設置
點關注 不迷路
如果你從本篇內容有收穫,求 點贊,求 關注,求 轉發 ,讓更多的人學習到。
如果本文有任何錯誤,請批評指教,不勝感激 !