go mod 依賴管理的具體使用
注:如果你的 GoLand 不會(huì)自動(dòng)拉取依賴,檢查一下 IDE 配置里面是不是沒有啟用 Go Modules。
go mod 介紹
Modules 官方定義為:
模塊是相關(guān) Go 包的集合。modules 是源代碼交換和版本控制的單元。go 命令直接支持使用 modules,包括記錄和解析對其他模塊的依賴性。
modules 替換舊的基于 GOPATH 的方法來指定在給定構(gòu)建中使用哪些源文件。
mod 相關(guān)環(huán)境變量
# Modules 開關(guān) GO111MODULE="auto" # Go 模塊代理(脫離VCS版本控制方式,直接通過鏡像站點(diǎn)來拉?。? GOPROXY="https://proxy.golang.org,direct" # 國內(nèi)無法訪問 # 保證拉取到的模塊版本數(shù)據(jù)未經(jīng)過篡改 GOSUMDB="sum.golang.org" # 國內(nèi)無法訪問 # 私有模塊配置(用于Go 模塊代理無法訪問到的地方,如私有庫) GONOPROXY="" GONOSUMDB="" GOPRIVATE=""
如何使用 go mod
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
我們可以先設(shè)置一下 GO111MODULE 和 GOPROXY 環(huán)境變量,可以直接加到環(huán)境變量中:
GO111MODULE=on開啟 go modules 功能GOPROXY設(shè)置 go 代理,下載依賴的時(shí)候可以更快地下載
go.mod 文件
啟用了 Go modules 的項(xiàng)目,初始化項(xiàng)目時(shí),會(huì)生成一個(gè) go.mod 文件。描述了當(dāng)前項(xiàng)目(也就是當(dāng)前模塊)的元信息
# module:用于定義當(dāng)前項(xiàng)目的模塊路徑。
module github.com/eddycjy/module-repo
# go:用于標(biāo)識(shí)當(dāng)前模塊的 Go 語言版本,值為初始化模塊時(shí)的版本,目前來看還只是個(gè)標(biāo)識(shí)作用。
go 1.13
# require:用于設(shè)置一個(gè)特定的模塊版本。
require (
example.com/apple v0.1.2
example.com/banana v1.2.3
example.com/banana/v2 v2.3.4
example.com/pear // indirect # indirect 標(biāo)識(shí)表示該模塊為間接依賴
example.com/strawberry // incompatible
)
# exclude:排除一個(gè)特定的模塊版本。
exclude example.com/banana v1.2.4
# replace:用于將一個(gè)模塊版本替換為另外一個(gè)模塊版本。
replace example.com/banana => example.com/fish
go mod 命令
go mod download:下載依賴包go mod edit:編輯 go.modgo mod graph:打印模塊依賴圖go mod init:初始化新的 go module 在當(dāng)前目錄(嗯,是的,我們寫的代碼其實(shí)也等于是一個(gè) go module)go mod tidy:拉取缺少的模塊,移除不用的模塊go mod vendor:將依賴復(fù)制到 vendor 下go mod verify:驗(yàn)證依賴是否正確go mod why:解釋為什么需要依賴
go.mod 文件
module hello go 1.18
go.mod 文件一旦創(chuàng)建后,它的內(nèi)容將會(huì)被 go toolchain 全面掌控。go toolchain 會(huì)在各類命令執(zhí)行時(shí),比如 go get、go build、go mod 等修改和維護(hù) go.mod 文件。
go.mod 提供了 module,require,replace 和 exclude 四個(gè)命令。
module:指定包的名字(路徑)require:指定依賴項(xiàng)模塊replace:替換依賴模塊(比如自己修改了一版,就可以使用replace將依賴替換為自己的實(shí)現(xiàn),但是代碼里面import路徑還是舊的路徑)exclude:用于排除某個(gè)包的特定版本,與replace類似,僅在當(dāng)前 module 為main module時(shí)有效,其他項(xiàng)目引用當(dāng)前項(xiàng)目時(shí),exclude指令會(huì)被忽略
go module 安裝依賴的原則是先拉取最新的 release tag,若無則拉最新的 commit。
go 會(huì)自動(dòng)生成一個(gè) go.sum 文件來記錄 dependency tree。
go get 升級(jí)
go get -u need-upgrade-package
升級(jí)后會(huì)將新的依賴版本更新到 go.mod,也可以使用 go get -u 升級(jí)所有依賴。
- 運(yùn)行
go get -u將會(huì)升級(jí)到最新的次要版本或者修訂版本(x.y.z 是修訂版本號(hào),y 是次要版本號(hào)) - 運(yùn)行
go get -u=patch將會(huì)升級(jí)到最新的修訂版本 - 運(yùn)行
go get package@version將會(huì)升級(jí)到指定的版本號(hào) version - 運(yùn)行
go get如果有版本的更改,那么go.mod文件也會(huì)更改
go.sum
這個(gè)文件記錄了當(dāng)前拉取的實(shí)際的版本號(hào)??梢员WC我們每次拉取的都是相同的版本,除非我們手動(dòng)去更新。
不同模式的命令區(qū)別
1. gopath模式
在工程經(jīng)過go build、go install或 go get等指令后,會(huì)將拉取的第三方xxx依賴包放在GOPATH/src目錄下
2. go vendor模式
go build 時(shí)的應(yīng)用路徑搜索調(diào)整成為 優(yōu)先搜當(dāng)前工程路徑/vendor目錄
2. go module模式
拉取依賴路徑
Go Modules 模式下,下載的包是存在 $GOPATH/pkg/mod 目錄下的拉取指定版本
GoModules 模式下,可以下載指定版本的包
go get {模塊名}@{最新版本: latest|分支: master|tag: v0.3.2|hash: 342b2e}
通常拉取到本地后,配合go mod tidy和go mod vendor就能有效的加載到我們程序中使用的包,同時(shí)會(huì)更新掉go.mod配置文件。
到此這篇關(guān)于go mod 依賴管理的具體使用的文章就介紹到這了,更多相關(guān)go mod 依賴管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn)
這篇文章主要介紹了詳解Go語言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作
這篇文章主要介紹了golang 后臺(tái)進(jìn)程的啟動(dòng)和停止操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Golang分布式應(yīng)用定時(shí)任務(wù)示例詳解
這篇文章主要為大家介紹了Golang分布式應(yīng)用定時(shí)任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07

