Go模塊是Go語言的依賴包管理工具。
一、Go1.11及之後版本才能使用。
二、Go1.11須要設置環境變量 GO111MODULE 爲 on(新特性開關,按照Go語言慣例,mod首次在go1.11版本中使用,go1.13及之後版本這個設置能夠不用了)。
三、能夠設置模塊代理:設置環境變量 GOPROXY 的值爲代理網址,目前可用的模塊公共代理網址有:
https://goproxy.io
https://goproxy.cn
https://mirrors.aliyun.com/go...
https://mirrors.cloud.tencent...
https://athens.azurefd.net
https://gocenter.io
(注:Go語言官方已推出官方模塊代理 https://proxy.golang.org 但目前國內處於被牆狀態。)
或者自建模塊代理工具:
https://github.com/goproxyio/...
https://github.com/goproxy/go...
https://github.com/gomods/athens
mod是模塊英文modules的簡寫。git
列舉一些經常使用的命令行:github
go help mod
查看幫助。go mod init <項目模塊名稱>
初始化模塊,會在項目根目錄下生成 go.mod
文件。參數<項目模塊名稱>
是非必寫的,但若是你的項目尚未代碼編寫,這個參數能快速初始化模塊。若是以前使用其它依賴管理工具(好比dep,glide等),mod會自動接管原來依賴關係。go mod tidy
根據go.mod文件來處理依賴關係。go mod vendor
將依賴包複製到項目下的 vendor 目錄。建議一些使用了被牆包的話能夠這麼處理,方便用戶快速使用命令go build -mod=vendor
編譯。go list -m all
顯示依賴關係。go list -m -json all
顯示詳細依賴關係。go list -m -versions <path>
顯示包有哪些已發佈版本go mod download <path@version>
下載依賴。參數<path@version>
是非必寫的,path是包的路徑,version是包的版本。go help mod
來查看。另外:
go.mod文件是文本文件,是能夠本身手動編輯的。
Go模塊版本控制的下載文件及信息會存儲到GOPATH的pkg/mod文件夾裏。
使用了Go模塊,源碼不必定要在GOPATH中進行。golang
go.mod文件json
module github.com/wuyumin/easydoc require ( github.com/BurntSushi/toml v0.3.0 github.com/mostafah/fsync v0.0.0-20151120150823-6c37e2827238 github.com/russross/blackfriday v1.5.1 )
go.mod文件必需要提交到git倉庫,但go.sum文件能夠不用提交到git倉庫(git忽略文件.gitignore中設置一下)。windows
答:這個問題通常出如今windows系統上,是換行符致使(類Unix系統通常使用LF換行符,windows系統使用CRLF換行符,而go.mod文件通常是使用LF換行符,windows系統上git默認會將LF換行符轉換成CRLF換行符)。
解決方法:在項目根目錄下添加或更新.gitattributes
文件,寫入這樣語句:bash
go.mod text eol=lf
go get xxx
時會報錯提示"go: cannot find main module; see 'go help modules'",這個是怎麼回事? 答:由於沒有找到go.mod
文件,因此會報錯。你只要在項目根目錄下生成一個go.mod文件就能夠了。ide
答:首先在項目的go.mod
文件的require處添加依賴包,而後在replace處添加替換本地依賴包(路徑要處理穩當)。好比:工具
require ( mytest v0.0.0 ) replace ( mytest v0.0.0 => ../mytest )
答:go get能夠在末尾加@符號,用來指定版本。網站
go get github.com/gorilla/mux #匹配最新的一個tag go get github.com/gorilla/mux@latest #跟上面同樣 go get github.com/gorilla/mux@master #匹配master分支 go get github.com/gorilla/mux@v1.6.2 #匹配v1.6.2 go get github.com/gorilla/mux@c856192 #匹配commit的SHA-1碼的版本
針對於開發者的建議:倉庫必須是帶v前綴的、語義化的版本號來打標籤tag,格式如v1.2.0
注:有些模塊代理還不支持一些指定版本的處理。ui
此篇文章最新的更改都會在GitHub上進行。
GitHub上的原文連接
https://github.com/wuyumin/tu... 歡迎在GitHub上star本項目或經過Issues提供修正建議。