第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

同一項(xiàng)目中的多個(gè)模塊

同一項(xiàng)目中的多個(gè)模塊

Go
狐的傳說 2023-06-12 16:53:03
我一直在玩 Go 模塊,我想知道以下目錄結(jié)構(gòu)的最佳實(shí)踐是什么:project├── go.mod├── main.go└── players? ? ├── go.mod? ? ├── players.go? ? └── players_test.goplayers一開始我在將包導(dǎo)入我的根項(xiàng)目時(shí)遇到問題,但我注意到我可以在根go.mod文件中執(zhí)行此操作module github.com/<name>/<project>require (? ? github.com/<name>/players v0.0.0)replace github.com/<name>/players => ./playersimport "github.com/<name>/players"這讓我可以在我的文件中做main.go?,F(xiàn)在這種方法有效并且是從這里獲取的,但我不確定這是否是正確的方法,或者這種方法是否只是為了在版本控制之外臨時(shí)更新本地包。另一種選擇,似乎有點(diǎn)矯枉過正,是讓每個(gè)模塊都有自己的存儲(chǔ)庫?長話短說,- 在同一個(gè)存儲(chǔ)庫中擁有多個(gè)模塊并將它們導(dǎo)入其他模塊/根main.go文件的最佳實(shí)踐方法是什么?
查看完整描述

2 回答

?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

一般來說,模塊應(yīng)該是包的集合。

但是您仍然可以創(chuàng)建單個(gè)包的模塊。這可能只有在您希望這些包具有不同的生命周期時(shí)才有意義。當(dāng)您想從另一個(gè)項(xiàng)目導(dǎo)入這些模塊并且不希望整個(gè)包集合的開銷時(shí),它也可能有意義。

一般來說:

模塊是相關(guān)的 Go 包的集合,它們作為一個(gè)單元一起進(jìn)行版本控制。

模塊記錄精確的依賴需求并創(chuàng)建可重現(xiàn)的構(gòu)建。

大多數(shù)情況下,版本控制存儲(chǔ)庫只包含一個(gè)在存儲(chǔ)庫根目錄中定義的模塊。(單個(gè)存儲(chǔ)庫支持多個(gè)模塊,但通常這會(huì)比每個(gè)存儲(chǔ)庫一個(gè)模塊導(dǎo)致更多的持續(xù)工作)。

總結(jié)存儲(chǔ)庫、模塊和包之間的關(guān)系:

  1. 一個(gè)存儲(chǔ)庫包含一個(gè)或多個(gè) Go 模塊。2.每個(gè)模塊包含一個(gè)或多個(gè)Go包。3. 每個(gè)包由一個(gè)或多個(gè) Go 源文件組成,位于一個(gè)目錄中。

查看完整回答
反對(duì) 回復(fù) 2023-06-12
?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

我知道這是一個(gè)老問題,但是在一個(gè)存儲(chǔ)庫中管理多個(gè)模塊時(shí),有一些更多的細(xì)節(jié)值得一提,無論有沒有go.work.

長話短說

每種方法都有利有弊,但如果您正在處理包含許多模塊的大型代碼庫,我建議堅(jiān)持使用基于提交或標(biāo)簽的版本處理,并使用 Go Workspace 進(jìn)行日常開發(fā)。

轉(zhuǎn)到模塊詳細(xì)信息

replace沒有版本控制的指令

當(dāng)你使用replace指向本地目錄的指令時(shí),你會(huì)發(fā)現(xiàn)依賴模塊的版本為v0.0.0-00010101000000-000000000000.?基本上你得不到版本信息。

使用模塊路徑go.mod定義的主要模塊無法進(jìn)行可重現(xiàn)的構(gòu)建,因?yàn)橹噶畹囊蕾嚹繕?biāo)可能已更新其內(nèi)容。如果許多模塊使用的依賴目標(biāo),這可能會(huì)特別成問題。這種通用包中的任何更改都可能同時(shí)導(dǎo)致所有依賴項(xiàng)的行為更改。github.com/name/projectgithub.com/name/projectreplacegithub.com/name/project/players

如果那不是您關(guān)心的問題,replace指令應(yīng)該絕對(duì)可以正常工作。在這樣的設(shè)置中,go.work可能是您并不真正需要的層。

有版本控制

如果您想確保版本設(shè)置適用于多個(gè)模塊的可重現(xiàn)和確定性構(gòu)建,您可以采用幾種不同的方法。

go.mod,一個(gè)存儲(chǔ)庫

這可能是最簡單的方法。對(duì)于每個(gè)模塊,都有清晰的提交歷史記錄和版本控制。只要您通過遠(yuǎn)程存儲(chǔ)庫引用模塊,這可能是最簡單的設(shè)置,并且依賴設(shè)置非常清晰。

但是,請(qǐng)注意,這種方法意味著您需要管理多個(gè)存儲(chǔ)庫,并且提供go.work幫助將需要適當(dāng)?shù)谋镜啬夸浻成洌@對(duì)于代碼庫的新手來說可能很困難。

基于提交的版本控制

仍然可以使用版本信息確定性地定義依賴關(guān)系,以便您可以在單個(gè)存儲(chǔ)庫中構(gòu)建代碼?;谔峤坏姆椒ㄐ枰钌俚牟襟E,并且仍然可以很好地工作。不過,有一些問題需要注意。

  • github.com/name/project對(duì) 具有依賴性github.com/name/project/players,您需要確保所需的代碼在遠(yuǎn)程存儲(chǔ)庫中。這是因?yàn)?code>github.com/name/project將從遠(yuǎn)程存儲(chǔ)庫中提取代碼和提交信息,即使存儲(chǔ)庫的本地副本上有相同的代碼也是如此。這確保了從提交引用中獲取的版本github.com/name/project/players,例如v0.1.1-0.20220418015705-5f504416395d(ref:?details of "pseudo-version"?)

  • 模塊名稱必須與目錄結(jié)構(gòu)匹配。例如,如果您有單個(gè)存儲(chǔ)庫github.com/name/project和模塊/src/mymodule/,則模塊名稱必須是github.com/name/project/src/mymodule。這是因?yàn)楫?dāng)模塊路徑解析發(fā)生時(shí),Go 會(huì)找到存儲(chǔ)庫的根目錄(在上面的示例中,這將是github.com/name/project.git),然后嘗試根據(jù)模塊名稱跟蹤目錄路徑。

  • 如果您在私有存儲(chǔ)庫中工作,則需要確保go.sum檢查不會(huì)阻止您。您可以簡單地使用GOPRIVATE=github.com/name/project來指定您不希望跳過校驗(yàn)和驗(yàn)證的路徑。

基于標(biāo)簽的版本控制

除了使用提交 SHA,您還可以使用 Git 標(biāo)簽。

但是因?yàn)橐粋€(gè)存儲(chǔ)庫中可能有很多模塊,Go Module 需要找到哪個(gè)標(biāo)簽映射到哪個(gè)。例如,具有以下目錄結(jié)構(gòu):

# All assumed to be using `github.com/name/project` prefix before package name

mypackage/? ? ? ? ? # v1.0.0

anotherpackage/? ? ?# v0.5.1

nested/dependency/? # v0.8.3

您將需要在 中創(chuàng)建標(biāo)簽github.com/name/project,其名稱與目錄結(jié)構(gòu)完全匹配,例如:


mypackage/v1.0.0

anotherpackage/v0.5.1

nested/dependency/v0.8.3

這樣,每個(gè)標(biāo)簽都被 Go Module 正確引用,并且您的依賴關(guān)系可以保持確定性。


go.work行為

如果您go.work在父目錄上有g(shù)o work use github.com/name/project/players等,則優(yōu)先使用本地文件。即使您在go.mod.


對(duì)于跨多個(gè)項(xiàng)目的本地開發(fā),Go Workspace 是一種同時(shí)處理多個(gè)事物的好方法,而無需先推送依賴項(xiàng)的代碼更改。但與此同時(shí),實(shí)際發(fā)布仍然需要分解提交,以便稍后在其他代碼更改中引用第一次提交。


go.work據(jù)說是您很少需要提交到存儲(chǔ)庫的文件。不過,您必須了解在父路徑中具有的影響go.work。


查看完整回答
反對(duì) 回復(fù) 2023-06-12
  • 2 回答
  • 0 關(guān)注
  • 172 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)