亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有更簡單的方法來保持本地 Go 包更新

有沒有更簡單的方法來保持本地 Go 包更新

Go
慕無忌1623718 2023-07-10 16:35:37
我正在使用導入到不同項目中的多個包,這些包包括用于我的業務邏輯的自定義適配器,這些適配器由 lambda 和谷歌云函數以及其他公共包共享。我現在這樣做的方法是供應它們并將它們包含在云功能中。對于可以在VM上編譯和部署的應用程序,我單獨編譯它們。這對我來說效果很好,但是,開發這些模塊很痛苦。如果我更新包中的方法簽名和名稱,我必須將更改推送到 github / gitlab (我的包路徑類似于 gitlab.com/groupName/projectName/pkg/packageName),然后執行 a 來更新包go get -u <pacakgeName>。這也并沒有真正更新它,有時我會堅持使用舊版本,不知道如何更新它。我想知道是否有更簡單的方法來處理這個問題。為了清楚起見:導出的包1路徑:gitlab.com/some/name/group/pkg/clients/psqlpsql-client    |    |_ pkg        |        |_psql.go應用程序1使用psql-client 路徑:gitlab.com/some/name/app1應用程序2使用psql-client 路徑:gitlab.com/some/name/app2
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

我的理解是(a)您正在使用新的 Go 模塊系統,(b)問題的一部分是您在進行本地開發時不希望在不同的存儲庫中不斷將更改推送到 github 或 gitlab。

換句話說,如果您在本地進行了更改,那么聽起來您不想通過 github/gitlab 往返這些更改,以便這些更改在您正在本地處理的相關存儲庫中可見。

最重要的建議

在單個存儲庫中包含 > 1 個模塊會使您的工作流程變得非常復雜。

正如您的示例所示,一般來說,在單個存儲庫中擁有 > 1 個模塊幾乎總是需要持續進行更多工作。這也很難做到正確。對于大多數人來說,這種成本幾乎總是不值得的。此外,通常帶來的好處并不是人們所期望的,或者在某些情況下,在存儲庫中擁有 > 1 個模塊沒有實際好處。

我絕對建議您遵循“1 repo == 1 module”這一普遍遵循的規則,至少現在是這樣。

使用多個存儲庫

鑒于您正在使用 Go 模塊,一種方法是您可以replace向模塊go.mod文件添加一條指令,通知該 Go 模塊其他 Go 模塊在磁盤上的位置。

結構示例

例如,如果您有三個存儲庫repo1,?repo2,?repo3,您可以克隆它們,以便它們在本地磁盤上彼此相鄰:

myproject/
├──?repo1
├──?repo2
└──?repo3

然后,如果repo1依賴于repo2repo3,您可以設置go.mod文件 來repo1了解其他兩個模塊在磁盤上的相對位置:

repo1 go.mod

replace?github.com/me/repo2?=>?../repo2
replace?github.com/me/repo3?=>?../repo3

當您位于repo1目錄或其任何子目錄中時,go類似go build或 的命令將使用和 的go test ./....磁盤版本。repo2repo3

repo2 go.mod

如果repo2取決于repo3,您還可以設置:

replace?github.com/me/repo3?=>?../repo3

repo3 go.mod

例如,如果repo3不依賴于 或repo1repo2那么您不需要將 a 添加replace到其go.mod。

額外細節

模塊 wiki 上的替換常見問題replace解答中更詳細地介紹了該指令。

最后,這取決于您的具體用例,但此時的常見解決方案是使用gohack,它可以自動執行部分過程。特別是,它創建依賴項的可變副本(默認在 中$HOME/gohack,但位置由$GOHACK變量控制)。gohack還設置當前go.mod文件有一個替換指令來指向該可變副本。


查看完整回答
反對 回復 2023-07-10
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

go get是可傳遞的,因此您可以將其添加到構建過程中。典型的 Go 項目構建基本上是:

go get -u ./... && go test ./... && go build ./cmd/myapp

它獲取并更新依賴項,運行所有項目測試,然后構建二進制文件。


查看完整回答
反對 回復 2023-07-10
  • 2 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號