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