Go 語言 go mod 包依賴管理工具
前文了解了 Go 語言中的包來復用代碼,一直以來 Go 語言的包管理都是飽受開發者詬病的一個軟肋,直到官方推出了 go mod。這個強大的包管理工具使得我們徹底告別了 Go 語言繁瑣的包管理。本文就來介紹以下如何使用 go mod 來進行包管理。
Tips:只有在Go11.1之后的版本有這個工具,在Go語言13.0以后該工具趨于完善。本文的Go版本為13.5,建議使用最新版本的Go語言環境。
1. 指令介紹
在控制臺中輸入go mod
指令,會出來這個工具的幫助命令。
指令解析如下表:
指令 | 功能 |
---|---|
go mod download | 下載依賴包到本地(默認下載目錄為 $GOPATH/pkg/mod) |
go mod edit | 編輯 go.mod 文件(不常用) |
go mod graph | 輸出go mod的依賴圖 |
go mod init | 初始化一個mod項目,即在包中示創建一個go.mod文件 |
go mod tidy | 自動補全新增(刪除減少)的依賴包 |
go mod verify | 校驗依賴包 |
go mod why | 解釋為什么要依賴,即顯示這個包在哪里被導入了(不常用) |
2. 代理配置
go mod 雖然可以直接幫我們下載好我們需要的包,但是因為 Go 語言很多包都是在國外的服務器上,國內下載具有一定的困難。但是不用擔心,go mod 提供了代理服務,同時很多國內的云服務器產商都提供了自己的代理服務:
- 1?
阿里云: https://mirrors.aliyun.com/goproxy
- 2
- 3?
微軟: https://goproxy.io
- 4
- 5?
七牛云: https://goproxy.cn
- 6
- 7
GoCenter: https://gocenter.io
2.1 臨時配置方案
go mod 代理的臨時配置方案就是在控制臺中使用控制臺對應的環境變量的修改指令去將?GOPROXY 的值設置為代理值,以 PowerShell 為例:
- 1?
$env:GOPROXY="https://goproxy.cn"
然后在終端中輸入go env GOPROXY
來查看修改結果,若輸出https://goproxy.cn
則為設置成功。這個設置只在當前控制臺有效,重啟控制臺之后就會失效。
2.2永久配置方案
Go語言自帶的環境變量修改指令可以永久修改GOPROXY這個環境變量。
Tips:這個指令只能修改go env中的環境變量
- 1
go env -w GOPROXY=https://goproxy.cn
然后關閉終端再打開,輸入go env GOPROXY
結果還是會輸出https://goproxy.cn
。
3. go mod 中使用 replace
replace?是用于使用本地包來替換導入包的一個操作,畢竟并不是所有導入包都能夠下載的到,也有一些是你自己開發,并未上傳到網絡中的代碼,這時候如果要在 go mod 中導入就需要?replace?了。
使用代碼如下:
- 1?
module firstgo
- 2
- 3?
go 1.13
- 4
- 5?
replace (
- 6? ? ? ? ?
//包導入名 => 本地包相對路徑/絕對路徑
- 7? ? ? ? ?
firstgo/packagetest1 => ./packagetest1
- 8? ? ? ? ?
firstgo/packagetest2 => ./packagetest2
- 9?
)
4. 在項目中使用
在了解了如何使用 go mod 之后,接下介紹一個在項目中使用的例子。在任意文件夾中創建Go文件,然后錄入以下代碼:
- 1?
package main
- 2
- 3?
import "github.com/gin-gonic/gin"
- 4
- 5?
func main() {
- 6? ? ? ? ?
r := gin.Default()
- 7? ? ? ? ?
r.GET("/ping", func(c *gin.Context) {
- 8? ? ? ? ? ? ? ? ?
c.JSON(200, gin.H{
- 9? ? ? ? ? ? ? ? ? ? ? ? ?
"message": "Hello Codey!",
- 10? ? ? ? ? ? ? ?
})
- 11? ? ? ?
})
- 12? ? ? ?
r.Run() // listen and serve on 0.0.0.0:8080
- 13?
}
隨后打開控制臺,輸入:
- 1?
go mod init
- 2?
go mod tidy
你就會看到 go mod 會下載很多相關依賴包:
Tips:你們下載的依賴包可能會比我多的多,因為我只是為了展示隨機刪了幾個依賴包重新下載。
同時文件夾下多了個 go.mod 和 go.sum ,其中 go.sum 不用在意,其中的內容為導入包的路徑、版本和它的hash ,是自動生成自動更新的。
go.mod 的內容為:
- 1?
module firstgo
- 2
- 3?
go 1.13
- 4
- 5?
require github.com/gin-gonic/gin v1.6.3
自動記錄了你引用的包路徑和版本。如果要修改使用版本,直接修改版本號即可。
5. 小結
本文主要介紹了Go語言的包管理工具 go mod ,以下是其注意事項:
- 可以在非?
$GOPATH/src
?的目錄中創建 go mod 項目; - 在下載不到包的情況可以選擇使用代理;
- 在使用本地包時可以使用 replace。
文章來源于網絡,侵刪!