go modules中replace使用方法
使用replace替換package
因?yàn)槟承┪粗?,并不是所有的包都能直接用go get獲取到,這時(shí)我們就需要使用go modules的replace功能了。
replace顧名思義,就是用新的package去替換另一個(gè)package,他們可以是不同的package,也可以是同一個(gè)package的不同版本??匆幌禄镜恼Z(yǔ)法:
go mod edit -replace=old[@v]=new[@v]
old是要被替換的package,new就是用于替換的package。
這里有幾點(diǎn)要注意:
- replace應(yīng)該在引入新的依賴(lài)后立即執(zhí)行,以免go tools自動(dòng)更新mod文件時(shí)使用了old package導(dǎo)致可能的失敗
- package后面的version不可省略。(edit所有操作都需要版本tag)
- version不能是master或者latest,這兩者go get可用,但是go mod edit不可識(shí)別,會(huì)報(bào)錯(cuò)。(不知道是不是bug,雖然文檔里表示可以這么用,希望go1.12能做點(diǎn)完善措施)
基于以上原因,我們替換一個(gè)package的步驟應(yīng)該是這樣的:
- 首先go get new-package(如果你知道package的版本tag,那么這一步其實(shí)可以省略,如果想使用最新的版本而不想確認(rèn)版本號(hào),則需要這一步)
- 然后查看go.mod,手動(dòng)復(fù)制new-package的版本號(hào)(如果你知道版本號(hào),則跳過(guò),這一步十分得不人性化,也許以后會(huì)改進(jìn))
- 接著go mod tidy或者go build或者使用其他的go tools,他們會(huì)去獲取new-package然后替換掉old-package
- 最后,在你的代碼里直接使用old-package的名字,golang會(huì)自動(dòng)識(shí)別出replace,然后實(shí)際你的程序?qū)?huì)使用new-package,替換成功
下面我們?nèi)匀挥胏hromedp的example做一個(gè)示例。
示例
chromedp使用了golang.org/x/image,這個(gè)package一般直連是獲取不了的,但是它有一個(gè)github.com/golang/image的鏡像,所以我們要用replace來(lái)用鏡像替換它。
我們先來(lái)看看如果不replace的情況下的依賴(lài)情況:
沒(méi)錯(cuò),我們使用了原來(lái)的包,當(dāng)然如果你無(wú)法獲取到它的話是不會(huì)被記錄進(jìn)來(lái)的。
下面我們go get它的鏡像:
# master表示獲取最新的commit go get github.com/golang/image@master
然后我們查看版本號(hào):
cat go.mod
有了版本號(hào),我們就能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,依賴(lài)已經(jīng)替換成了鏡像:
目前來(lái)看,replace做的遠(yuǎn)不如go get那樣方便人性化,不過(guò)畢竟還只是測(cè)試階段的功能,期待一下它在go1.12的表現(xiàn)吧。
以上就是go modules中replace使用方法的詳細(xì)內(nèi)容,更多關(guān)于go modules使用replace的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go 代碼規(guī)范錯(cuò)誤處理示例經(jīng)驗(yàn)總結(jié)
這篇文章主要為大家介紹了Go 代碼規(guī)范錯(cuò)誤處理示例實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08golang?pprof?監(jiān)控系列?go?trace統(tǒng)計(jì)原理與使用解析
這篇文章主要為大家介紹了golang?pprof?監(jiān)控系列?go?trace統(tǒng)計(jì)原理與使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04一文帶你了解Go語(yǔ)言實(shí)現(xiàn)的并發(fā)神庫(kù)conc
前幾天逛github發(fā)現(xiàn)了一個(gè)有趣的并發(fā)庫(kù)-conc,這篇文章將為大家詳細(xì)介紹一下這個(gè)庫(kù)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01go語(yǔ)言基礎(chǔ) seek光標(biāo)位置os包的使用
這篇文章主要介紹了go語(yǔ)言基礎(chǔ) seek光標(biāo)位置os包的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05詳解如何用Golang處理每分鐘100萬(wàn)個(gè)請(qǐng)求
在項(xiàng)目開(kāi)發(fā)中,我們常常會(huì)遇到處理來(lái)自數(shù)百萬(wàn)個(gè)端點(diǎn)的大量POST請(qǐng)求,本文主要介紹了Golang實(shí)現(xiàn)處理每分鐘100萬(wàn)個(gè)請(qǐng)求的方法,希望對(duì)大家有所幫助2023-04-04go語(yǔ)言實(shí)現(xiàn)屏幕截圖的示例代碼
屏幕截圖在很多地方都可以 用到,本文主要介紹了go語(yǔ)言實(shí)現(xiàn)屏幕截圖的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04GoFrame框架數(shù)據(jù)校驗(yàn)之校驗(yàn)對(duì)象校驗(yàn)結(jié)構(gòu)體
這篇文章主要為大家介紹了GoFrame框架數(shù)據(jù)校驗(yàn)之校驗(yàn)對(duì)象校驗(yàn)結(jié)構(gòu)體示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Go語(yǔ)言到底有沒(méi)有引用傳參(對(duì)比 C++ )
這篇文章主要介紹了Go 到底有沒(méi)有引用傳參(對(duì)比 C++ ),需要的朋友可以參考下2017-09-09