Go模塊簡明教程(Go語言依賴包管理工具)

Go模塊是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
)

Git建議

go.mod文件必需要提交到git倉庫,但go.sum文件能夠不用提交到git倉庫(git忽略文件.gitignore中設置一下)。windows

問題解答

  • 問:git操做時,個人go.mod文件沒有修改,爲何git總是提示是修改狀態呢?

    答:這個問題通常出如今windows系統上,是換行符致使(類Unix系統通常使用LF換行符,windows系統使用CRLF換行符,而go.mod文件通常是使用LF換行符,windows系統上git默認會將LF換行符轉換成CRLF換行符)。
    解決方法:在項目根目錄下添加或更新.gitattributes文件,寫入這樣語句:bash

go.mod text eol=lf
  • 問:啓用Go模塊之後,使用go get xxx時會報錯提示"go: cannot find main module; see 'go help modules'",這個是怎麼回事?

    答:由於沒有找到go.mod文件,因此會報錯。你只要在項目根目錄下生成一個go.mod文件就能夠了。ide

  • 問:如何在Go模塊裏使用本地依賴包?

    答:首先在項目的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提供修正建議。

相關文章
相關標籤/搜索