剛開始學習 Go Modules。我有一個關于在同一個模塊中導入本地包的問題。我正在查看的示例是這個 repo:https://github.com/Azure/azure-service-bus-go該模塊是module github.com/Azure/azure-service-bus-go. 該模塊內有一個單獨的包,atom(但它不是模塊本身)。當主包中的文件導入原子時,它們會這樣做:import "github.com/Azure/azure-service-bus-go/atom"--queue_manager.go舉個例子。我不太明白 - GO 如何知道查看本地原子包,而不是說 Github 上的那個?讓我感到困惑的是,作為被修改模塊的一部分的東西被遠程/絕對 URI 引用。是否保證如果我修改本地磁盤上的文件并構建我實際上引用的是最新版本而不是已經推送的東西?作為一個玩具練習,我嘗試使用不存在的 Github URI 創建一個模塊,實際上它確實似乎go mod tidy試圖在 Github 上查找它,即使實際上確實存在本地副本
3 回答

aluckdog
TA貢獻1847條經驗 獲得超7個贊
我有一個類似的問題。我看到的答案似乎只適用于非常簡單的目錄結構。但是在大型項目中很容易得到復雜的結構。考慮這樣的模塊結構:
quotes/
main.go
go.mod
handler/
quoteshandler/
quoteshandler.go
middleware/
...
為了使用包的本地版本,我在頂級 go.mod 文件中使用“replace”指令:
quotes/go.mod:
...
replace "github.com/quotes-service" => ../quotes-service
但是文件quoteshandler.go里面有import語句:
import "github.com/quotes-service/quotes/middleware"
通過從 github 存儲庫下載來滿足這些導入依賴middleware項,這不是我想要的。我不知道如何簡單地解決這個問題。似乎必須將帶有替換指令的 go.mod 文件放在模塊的每個子目錄中。
- 3 回答
- 0 關注
- 275 瀏覽
添加回答
舉報
0/150
提交
取消