php小編魚仔在這里給大家分享一個有關Go語言的問題:“如何將工作區(qū)作為依賴項導入到另一個Go存儲庫中?”在Go語言開發(fā)中,依賴項管理是一個常見的問題。有時候,我們可能需要將一個工作區(qū)作為依賴項導入到另一個存儲庫中,以便在項目中使用。在本文中,我將為您詳細介紹如何實現這個目標,以幫助您更好地管理Go語言項目的依賴項。
問題內容
我有一個多工作區(qū)項目,其結構是:
apps/go.mod go.work
登錄后復制
該項目包含一個子模塊 apps
及其 go.work
文件具有:
go 1.180 use ( ./apps )
登錄后復制
我有另一個go項目(單獨的存儲庫)想要將此app
子模塊作為庫導入,下面是go.mod
:
module xxxx go 1.18 require ( github.com/zhaoyi0113/test-go-module v0.0.3 // indirect )
登錄后復制
然后我有以下代碼:
package main import ( "github.com/zhaoyi0113/test-go-module/apps/logger" ) func main() { logger.test() }
登錄后復制
編譯失敗,錯誤如下:
main.go:7:2: no required module provides package github.com/zhaoyi0113/test-go-module/apps/logger; to add it: go get github.com/zhaoyi0113/test-go-module/apps/logger
登錄后復制
如何從多工作區(qū)項目導入子模塊?
解決方法
您無法導入工作區(qū)。
目前的情況是這樣的:
github.com/zhaoyi0113/test-go-module/apps
有一個模塊 聲明其模塊路徑為 github.com/zhaoyi0113/test-go-module
。該模塊不可用,因為該模塊的實際路徑與聲明的路徑不匹配(請注意其中一個路徑中缺少 /apps
)。
xxxx模塊需要github.com/zhaoyi0113/test-go-module
,但在該路徑下沒有找到模塊。它位于 apps
子目錄中,如上一段所述。
根據您想要放置模塊的位置,有兩種可能的修復方法。
如果你想將導入的 go.mod 保留在 當前目錄中 然后更新模塊路徑以包含 apps
:
導入模塊的go.mod:
module github.com/zhaoyi0113/test-go-module/apps go 1.19
登錄后復制
用于導入模塊的go.mod:
module xxxx go 1.18 require ( github.com/zhaoyi0113/test-go-module/apps v0.0.3 // indirect )
登錄后復制
第二個也是常規(guī)選項
就是將go.mod放在項目的根目錄下,并將go.work文件放在項目之外。要實現此功能,請將 go.mod 移至項目的根目錄(因為它在最初的提交中)并將 go.work 移到其他地方。不需要對導入模塊進行任何更改。