go modules中使用replace用法

2022-07-03 20:33:09 字數 3131 閱讀 8443

因為某些未知原因,並不是所有的包都能直接用go get獲取到,這時我們就需要使用go modules的replace功能了。(當然大部分問題掛個梯子就能解決,但是我們也可以有其它選項)

replace顧名思義,就是用新的package去替換另乙個package,他們可以是不同的package,也可以是同乙個package的不同版本。看一下基本的語法:

go mod edit -replace=old[@v]=new[@v]
old是要被替換的package,new就是用於替換的package。

這裡有幾點要注意:

基於以上原因,我們替換乙個package的步驟應該是這樣的:

首先go get new-package(如果你知道package的版本tag,那麼這一步其實可以省略,如果想使用最新的版本而不想確認版本號,則需要這一步)

然後檢視go.mod,手動複製new-package的版本號(如果你知道版本號,則跳過,這一步十分得不人性化,也許以後會改進)

接著go mod tidy或者go build或者使用其他的go tools,他們會去獲取new-package然後替換掉old-package

最後,在你的**裡直接使用old-package的名字,golang會自動識別出replace,然後實際你的程式將會使用new-package,替換成功

下面我們仍然用chromedp的example做乙個示例。

chromedp使用了golang.org/x/image,這個package一般直連是獲取不了的,但是它有乙個github.com/golang/image的映象,所以我們要用replace來用映象替換它。

我們先來看看如果不replace的情況下的依賴情況:

沒錯,我們使用了原來的包,當然如果你無法獲取到它的話是不會被記錄進來的。

下面我們go get它的映象:

# master表示獲取最新的commit

然後我們檢視版本號:

有了版本號,我們就能replace了:

go mod edit -replace=golang.org/x/[email protected]=github.com/golang/[email protected]
現在我們檢視一下go.mod:

replace資訊已經更新了,現在我們只要go mod tidy或者go build,我們的**就可以使用new-package了。

更新後的go.sum,依賴已經替換成了映象:

目前來看,replace做的遠不如go get那樣方便人性化,不過畢竟還只是測試階段的功能,期待一下它在go1.12的表現吧。

replace顧名思義,就是用新的package去替換另乙個package,他們可以是不同的package,也可以是同乙個package的不同版本。看一下基本的語法:

go mod edit -replace=old[@v]=new[@v]
old是要被替換的package,new就是用於替換的package。

這裡有幾點要注意:

基於以上原因,我們替換乙個package的步驟應該是這樣的:

首先go get new-package(如果你知道package的版本tag,那麼這一步其實可以省略,如果想使用最新的版本而不想確認版本號,則需要這一步)

然後檢視go.mod,手動複製new-package的版本號(如果你知道版本號,則跳過,這一步十分得不人性化,也許以後會改進)

接著go mod tidy或者go build或者使用其他的go tools,他們會去獲取new-package然後替換掉old-package

最後,在你的**裡直接使用old-package的名字,golang會自動識別出replace,然後實際你的程式將會使用new-package,替換成功

下面我們仍然用chromedp的example做乙個示例。

chromedp使用了golang.org/x/image,這個package一般直連是獲取不了的,但是它有乙個github.com/golang/image的映象,所以我們要用replace來用映象替換它。

我們先來看看如果不replace的情況下的依賴情況:

沒錯,我們使用了原來的包,當然如果你無法獲取到它的話是不會被記錄進來的。

下面我們go get它的映象:

# master表示獲取最新的commit

然後我們檢視版本號:

有了版本號,我們就能replace了:

go mod edit -replace=golang.org/x/[email protected]=github.com/golang/[email protected]
現在我們檢視一下go.mod:

replace資訊已經更新了,現在我們只要go mod tidy或者go build,我們的**就可以使用new-package了。

更新後的go.sum,依賴已經替換成了映象:

目前來看,replace做的遠不如go get那樣方便人性化,不過畢竟還只是測試階段的功能,期待一下它在go1.12的表現吧。

Golang基礎 Go Modules的使用

go module是go1.11版本之後官方推出的版本管理工具,並且從go1.13版本開始,go module將是go語言預設的依賴管理工具。從 go 1.11 開始,go 允許在 gopath src 外的任何目錄下使用 go.mod 建立專案。在gopath src中,為了相容性,go 命令仍然...

在go modules裡使用go get進行包管理

首先我們介紹過go mod edit修改go.mod,然而它有兩點缺陷 好訊息是go get現在有了在modules中新增 修改 更新package的能力。想要完整體驗go modules,我們需要選擇乙個gopath以外的目錄,並且設定go11module on,這樣使用go get時只會影響當前...

Go Modules使用教程(3分鐘學會)

隨著go 1.13發布,goproxy預設值proxy.golang.org在中國大陸不能被訪問。七牛雲順勢推出goproxy.cn,以利於中國開發者更好使用go modules。1 公升級到go1.13 2 執行go env w go111module on 3 執行go env w goprox...