go-mod 入門


Q群有人問go mod 問題,自己也忘了些.順便再整理下.

GO111MODULE可以設置為三個字符串值之一:off,on或auto(默認值)。

off 則go命令從不使用新模塊支持。它查找vendor 目錄和$GOPATH以查找依賴關系;也就是繼續使用“$GOPATH模式”。

on 則go命令需要使用模塊,go 會忽略 $GOPATH 和 vendor 文件夾,只根據go.mod下載依賴。

auto 或未設置,則go命令根據當前目錄啟用或禁用模塊支持。僅當當前目錄位於$GOPATH/src之外並且其本身包含go.mod文件或位於包含go.mod文件的目錄下時,才啟用模塊支持。

如果需要查看go module的詳細文檔(非常長),可以在控制台輸入

go help modules

go mod命令

download    download modules to local cache (下載依賴的module到本地cache))
edit        edit go.mod from tools or scripts (編輯go.mod文件)
graph       print module requirement graph (打印模塊依賴圖))
init        initialize new module in current directory (再當前文件夾下初始化一個新的module, 創建go.mod文件))
tidy        add missing and remove unused modules (增加丟失的module,去掉未用的module)
vendor      make vendored copy of dependencies (將依賴復制到vendor下)
verify      verify dependencies have expected content (校驗依賴)
why         explain why packages or modules are needed (解釋為什么需要依賴)

初始化mod

go mod init [module]可以創建一個go.mod,只有一行信息module。

go命令通過查找當前目錄中的go.mod或者當前目錄的父目錄,或者祖父目錄,依次遞歸查找。
go.mod文件可以通過require,replace和exclude語句使用的精確軟件包集。

require語句指定的依賴項模塊
replace語句可以替換依賴項模塊
exclude語句可以忽略依賴項模塊

go mod download

可以下載所需要的依賴,但是依賴並不是下載到$GOPATH中,而是$GOPATH/pkg/mod中,多個項目可以共享緩存的module。

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

replace (
	golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
	golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
	golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
)

go clean -modcache 清除緩存

go mod 新東西偶爾還會出現問題 ,這個命令可以嘗試修復,不過執行之前可以考慮備份一下pkg/mod中的包.以防不測.


免責聲明!

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



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