php小編百草為你解答Golang中從本地導(dǎo)入路徑轉(zhuǎn)移到遠(yuǎn)程導(dǎo)入路徑的問(wèn)題。在Golang開發(fā)中,我們經(jīng)常會(huì)遇到從本地導(dǎo)入路徑轉(zhuǎn)移到遠(yuǎn)程導(dǎo)入路徑的情況,尤其是在多人協(xié)作開發(fā)或者項(xiàng)目遷移時(shí)。本文將詳細(xì)介紹如何正確處理這個(gè)問(wèn)題,確保代碼能夠順利運(yùn)行。讓我們一起來(lái)看看吧!
問(wèn)題內(nèi)容
我剛剛開始將我的應(yīng)用程序分解為不同的存儲(chǔ)庫(kù)。像許多人一樣,我正在經(jīng)歷處理 Go 和更改存儲(chǔ)庫(kù)的麻煩。但這些問(wèn)題有很多問(wèn)答,所以我不會(huì)在這里詢問(wèn)。
相反,我有一個(gè)簡(jiǎn)單的問(wèn)題,但我無(wú)法理解。我的所有模塊,因?yàn)樗且粋€(gè)大應(yīng)用程序,都只是本地引用。例如core/validate
等。
將內(nèi)容移至多個(gè)存儲(chǔ)庫(kù)中。似乎會(huì)導(dǎo)致本地引用出現(xiàn)問(wèn)題,因此我將路徑更改為遠(yuǎn)程路徑,例如 gitlab.com//core.git/validate
正如幾個(gè)問(wèn)答所建議的那樣。
但是,這會(huì)帶來(lái)一個(gè)問(wèn)題,如果說(shuō) gitlab.com//core.git/config
引用了 gitlab.com//core.git/validate
并不意味著 gitlab.com/ /core.git/config
現(xiàn)在指向 pck/mod/gitlab.com/...
中的某些內(nèi)容或指向遠(yuǎn)程服務(wù)器,或者指向彼此以外的任何地方,就像它們只有像 core/validate
這樣的相對(duì)路徑時(shí)一樣?當(dāng)我更改它們時(shí),它看起來(lái)就是這樣,因?yàn)槲业?IDE (GoLand) 顯示未找到的引用。
我還沒有嘗試做 go mod init
并從頭開始重建 mod,但是 go mod tidy
不起作用,我不知道我是否也必須在 go.work
中進(jìn)行更改遠(yuǎn)程路徑很好,但現(xiàn)在我只是在 IDE 中找不到顯示的導(dǎo)入。
似乎如果您使用遠(yuǎn)程引用來(lái)進(jìn)行開發(fā)時(shí)在代碼中所做的更改,則必須推送更改,以便它是引用指向的位置,也許還可以執(zhí)行 go get
更改為引用本地遠(yuǎn)程路徑的地方,這似乎是一種糟糕的開發(fā)方式,因此不可能是正確的。
那么,這些遠(yuǎn)程路徑如何與開發(fā)配合使用,我缺少什么?
解決方法
有幾個(gè)概念會(huì)引起混淆。
模塊是包的集合。您可以將模塊命名為“mymodule”,然后“mymodule”下的所有包將被命名為“mymodule/pkg1”、“mymodule/pkg2/otherpkg”等。
然后您就有了包的導(dǎo)入路徑。導(dǎo)入路徑顯示包的位置。例如,你的源代碼在“mymodule/pkg1”中,而你導(dǎo)入了“mymodule/pkg2”,那么這是對(duì)同一模塊下的包的引用。
現(xiàn)在假設(shè)您在“github.com/mygroup/othermodule”上有另一個(gè)模塊,名為“othermodule”。您在此模塊中導(dǎo)入一個(gè)包作為“github.com/mygroup/othermodule/pkg1”。如果“othermodule/pkg1”引用“othermodule/pkg2”,那么它仍然導(dǎo)入“othermodule/pkg2”,因?yàn)樗挥谕荒K中。但是從“mymodule/pkg1”中,您將其導(dǎo)入為“github.com/mygroup/othermodule/pkg2”。
Go 模塊系統(tǒng)使用其他模塊的版本引用。當(dāng)您包含模塊中的包時(shí),該模塊的特定版本將添加到 go.mod 中。如果您向該模塊推送新的更改,則必須更新該引用以包含這些更改。這就是為什么最好不要將緊密耦合的項(xiàng)目分成多個(gè)模塊的原因。
如果您想一起開發(fā)多個(gè)模塊,請(qǐng)使用“replace”指令來(lái)使用該模塊的本地副本,而不是指向存儲(chǔ)庫(kù)上的版本。