golang中如何進行項目模塊及依賴管理


Go modules 是 Go 語⾔的依賴解決⽅案,發布於 Go1.11,成⻓於 Go1.12,豐富於 Go1.13,正式於 Go1.14 推薦在⽣產上使⽤。

解決了什么問題 ?

Go 語⾔⻓久以來的依賴管理問題。

“淘汰”現有的 GOPATH 的使⽤模式。

統⼀社區中的其它的依賴管理⼯具(提供遷移功能)。

GOPATH的⼯作模式

GOPATH的弊端 :⽆版本控制概念 ⽆法同步⼀致第三⽅版本號 ⽆法指定當前項⽬引⽤的第三⽅版本號

 

Go Modules模式

go mod命令

go mod init ⽣成 go.mod ⽂件

go mod download 下載 go.mod ⽂件中指明的所有依賴

go mod tidy 整理現有的依賴

go mod graph 查看現有的依賴結構

go mod edit 編輯 go.mod ⽂件

go mod vendor 導出項⽬所有的依賴到vendor⽬錄

go mod verify 校驗⼀個模塊是否被篡改過

go mod why 查看為什么需要依賴某模塊

 go mod 環境變量

GO111MODULE 是否開啟go modules模式 建議go V1.11之后,都設置為on

GOPROXY 項⽬的第三⽅依賴庫的下載源地址 建議設置國內的地址 阿⾥雲 https://mirrors.aliyun.com/goproxy/ 七⽜雲 https://goproxy.cn,direct

direct ⽤於指示 Go 回源到模塊版本的源地址去抓取(⽐如 GitHub 等)

GOSUMDB ⽤來校驗拉取的第三⽅庫是否是完整的 默認也是國外的⽹站,如果設置了GOPROXY,這個就不⽤設置了

GONOPROXY 通過設置GOPRIVATE即可

GONOSUMDB 通過設置GOPRIVATE即可

GOPRIVATE 通過設置GOPRIVATE即可

go env -w GOPRIVATE="git.example.com,github.com/aceld/zinx 表示git.example.com 和 github.com/aceld/zinx 是私有倉庫,不會進⾏GOPROXY下載和校驗

go evn -w GOPRIVATE="*.example.com" 表示所有模塊路徑為example.com的⼦域名,⽐如 git.example.com 或者 hello.example.com 都不進⾏ GOPROXY下載和校驗

通過 go env來查看環境變量 go env -w GO111MODULE=on 或者通過 Linux export 環境⽅式也可以

使⽤Go Modules初始化項⽬

1 開啟Go Modules模塊 保證GO111MODULE=on

go env -w GO111MODULE=on

export GO111MODULE=on              設置在⽤戶啟動腳本中 需要重新打開終端或者執⾏source ~/.bashrc

2 初始化項⽬

(1)任意⽂件夾創建⼀個項⽬(不要求在$GOPATH/src) mkdir -p $HOME/aceld/modules_test

(2)創建go.mod⽂件,同時起當前項⽬的模塊名稱 go mod init github.com/aceld/module_test

就會⽣成⼀個go mod⽂件

module github.com/aceld/moudles_test
go 1.14

在該項⽬編寫源代碼

如果源代碼中依賴某個庫(⽐如: github.com/aceld/zinx/znet)

⼿動down go get github.com/aceld/zinx/znet

⾃動down

(3)go mod ⽂件會添加⼀⾏新代碼

module github.com/aceld/moudles_test
go 1.14
require github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746 // indirect

含義當前模塊依賴github.com/aceld/zinx

依賴的版本是 v0.0.0-20200315073925-f09df55dc746

//indirect 表示間接依賴 因為項⽬直接依賴的是znet包 所以所間接依賴zinx包

(4)會⽣成⼀個go.sum⽂件

github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746 h1:TturbcEfboY81jsKVSQtGkqk8FN8ag0TmKYzaFHflmQ=

github.com/aceld/zinx v0.0.0-20200315073925-f09df55dc746/go.mod h1:bMiERrPdR8FzpBOo86nhWWmeHJ1cCaqVvWKCGcDVJ5M=

github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=

 

go.sum⽂件的作⽤ 羅列當前項⽬直接或間接的依賴所有模塊版本,保證今后項⽬依賴的版本不會被篡改

h1:hash 表示整體項⽬的zip⽂件打開之后的全部⽂件的校驗和來⽣成的hash 如果不存在,可能表示依賴的庫可能⽤不上

xxx/go.mod h1:hash go.mod⽂件做的hash

 

修改項⽬模塊的版本依賴關系

go mod edit -replace=zinx@v0.0.0-20200306023939bc416543ae24=zinx@v0.0.0-20200221135252-8a8954e75100

go mod⽂件就會被修改

module github.com/aceld/modules_test
go 1.14
require github.com/aceld/zinx v0.0.0-20200306023939-bc416543ae24 // indirect
replace zinx v0.0.0-20200306023939-bc416543ae24 => zinx v0.0.0-20200221135252-8a8954e75100

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM