刚开始学习 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 关注
- 368 浏览
添加回答
举报
0/150
提交
取消

