在介紹之前先講幾個直接上手使用的命令勇皇,前面4個及可實(shí)現(xiàn)項目的初始化、檢測依賴、下載依賴、導(dǎo)出依賴
go mod init # 初始化
go mod tidy # 更新依賴文件
go mod download # 下載依賴文件
go mod vendor # 將依賴轉(zhuǎn)移至本地的vendor文件
go mod edit # 手動修改依賴文件
go mod graph # 打印依賴圖
go mod verify # 校驗(yàn)依賴
1易结、GO111MODULE
要使用go module,設(shè)置GO111MODULE=on
2、既有項目
假設(shè)你已經(jīng)有了一個go 項目, 比如在$GOPATH/github.com/smallnest/rpcx下搞动, 你可以使用go mod init github.com/smallnest/rpcx在這個文件夾下創(chuàng)建一個空的go.mod?(只有第一行?module github.com/smallnest/rpcx)躏精。然后你可以通過?go get ./...讓它查找依賴,并記錄在go.mod文件中(你還可以指定?-tags,這樣可以把tags的依賴都查找到)鹦肿。通過go mod tidy也可以用來為go.mod增加丟失的依賴矗烛,刪除不需要的依賴。執(zhí)行上面的命令會把go.mod的latest版本換成實(shí)際的最新的版本箩溃,并且會生成一個go.sum記錄每個依賴庫的版本和哈希值瞭吃。
3、新的項目
在GOPATH之外創(chuàng)建新的項目涣旨。
go mod init packagename可以創(chuàng)建一個空的go.mod,然后你可以在其中增加require github.com/smallnest/rpcx latest依賴歪架,或者像上面一樣讓go自動發(fā)現(xiàn)和維護(hù)。
go mod download可以下載所需要的依賴霹陡,但是依賴并不是下載到$GOPATH中牡拇,而是$GOPATH/pkg/mod中,多個項目可以共享緩存的module穆律。
4惠呼、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 moduleincurrent directory (再當(dāng)前文件夾下初始化一個新的module, 創(chuàng)建go.mod文件))
tidy? ? ? ? add missing and remove unused modules (增加丟失的module,去掉未用的module)
vendor? ? ? make vendored copy of dependencies (將依賴復(fù)制到vendor下)
verify? ? ? verify dependencies have expected content (校驗(yàn)依賴)
why? ? ? ? explain why packages or modules are needed (解釋為什么需要依賴)
5峦耘、在國內(nèi)訪問golang.org/x的各個包都需要翻墻
你可以在go.mod中使用replace替換成github上對應(yīng)的庫剔蹋。
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
)
依賴庫中的replace對你的主go.mod不起作用,比如github.com/smallnest/rpcx的go.mod已經(jīng)增加了replace,但是你的go.mod雖然require了rpcx的庫辅髓,但是沒有設(shè)置replace的話泣崩,?go get還是會訪問golang.org/x。所以如果想編譯那個項目洛口,就在哪個項目中增加replace矫付。
6、版本格式
下面的版本都是合法的:
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
gopkg.in/vmihailenco/msgpack.v2 v2.9.1
gopkg.in/yaml.v2 <=v2.2.1
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
latest
7第焰、go get 升級
運(yùn)行?go get -u?將會升級到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號买优, y是次要版本號)
運(yùn)行?go get -u=patch?將會升級到最新的修訂版本
運(yùn)行?go get package@version?將會升級到指定的版本號version
8、go mod vendor
go mod vendor?會復(fù)制modules下載到vendor中, 貌似只會下載你代碼中引用的庫挺举,而不是go.mod中定義全部的module杀赢。