go modules中replace使用方法
使用replace替換package
因為某些未知原因,并不是所有的包都能直接用go get獲取到,這時我們就需要使用go modules的replace功能了。
replace顧名思義,就是用新的package去替換另一個package,他們可以是不同的package,也可以是同一個package的不同版本。看一下基本的語法:
go mod edit -replace=old[@v]=new[@v]
old是要被替換的package,new就是用于替換的package。
這里有幾點(diǎn)要注意:
- replace應(yīng)該在引入新的依賴后立即執(zhí)行,以免go tools自動更新mod文件時使用了old package導(dǎo)致可能的失敗
- package后面的version不可省略。(edit所有操作都需要版本tag)
- version不能是master或者latest,這兩者go get可用,但是go mod edit不可識別,會報錯。(不知道是不是bug,雖然文檔里表示可以這么用,希望go1.12能做點(diǎn)完善措施)
基于以上原因,我們替換一個package的步驟應(yīng)該是這樣的:
- 首先go get new-package(如果你知道package的版本tag,那么這一步其實可以省略,如果想使用最新的版本而不想確認(rèn)版本號,則需要這一步)
- 然后查看go.mod,手動復(fù)制new-package的版本號(如果你知道版本號,則跳過,這一步十分得不人性化,也許以后會改進(jìn))
- 接著go mod tidy或者go build或者使用其他的go tools,他們會去獲取new-package然后替換掉old-package
- 最后,在你的代碼里直接使用old-package的名字,golang會自動識別出replace,然后實際你的程序?qū)褂胣ew-package,替換成功
下面我們?nèi)匀挥胏hromedp的example做一個示例。
示例
chromedp使用了golang.org/x/image,這個package一般直連是獲取不了的,但是它有一個github.com/golang/image的鏡像,所以我們要用replace來用鏡像替換它。
我們先來看看如果不replace的情況下的依賴情況:
沒錯,我們使用了原來的包,當(dāng)然如果你無法獲取到它的話是不會被記錄進(jìn)來的。
下面我們go get它的鏡像:
# master表示獲取最新的commit go get github.com/golang/image@master
然后我們查看版本號:
cat go.mod
有了版本號,我們就能replace了:
go mod edit -replace=golang.org/x/image@v0.0.0-20180708004352-c73c2afc3b81=github.com/golang/image@v0.0.0-20180708004352-c73c2afc3b81
現(xiàn)在我們查看一下go.mod:
replace信息已經(jīng)更新了,現(xiàn)在我們只要go mod tidy或者go build,我們的代碼就可以使用new-package了。
更新后的go.sum,依賴已經(jīng)替換成了鏡像:
目前來看,replace做的遠(yuǎn)不如go get那樣方便人性化,不過畢竟還只是測試階段的功能,期待一下它在go1.12的表現(xiàn)吧。
以上就是go modules中replace使用方法的詳細(xì)內(nèi)容,更多關(guān)于go modules使用replace的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說明
這篇文章主要介紹了Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12golang的httpserver優(yōu)雅重啟方法詳解
這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03使用Go語言構(gòu)建高效的二叉搜索樹聯(lián)系簿
樹是一種重要的數(shù)據(jù)結(jié)構(gòu),而二叉搜索樹(BST)則是樹的一種常見形式,在本文中,我們將學(xué)習(xí)如何構(gòu)建一個高效的二叉搜索樹聯(lián)系簿,感興趣的可以了解下2024-01-01