刚刚开始学习Go模块。我对在同一模块内导入本地软件包有疑问。我正在查看的示例是此仓库:
https://github.com/Azure/azure-service-bus-go
模块为module github.com/Azure/azure-service-bus-go
。该模块内部有一个单独的软件包atom
(但它本身不是模块)。
当主包中的文件导入atom时,它们将像这样进行操作:import "github.com/Azure/azure-service-bus-go/atom"
-以queue_manager.go
为例。
我不太了解-GO如何知道查看本地atom软件包,而不是在Github上说一个?对我来说似乎令人困惑的是,远程/绝对URI引用了正在修改的模块中的某些内容。是否可以保证如果我修改本地磁盘上的文件并进行构建,实际上是在引用最新版本而不是已经推送的版本?
作为一个玩具练习,我试图创建一个不存在的Github URI的模块,实际上,go mod tidy
确实试图与Github进行对比,即使实际上确实存在本地副本< / p>
答案 0 :(得分:1)
go.mod
文件中的 module
directive 声明了该模块中所有包的导入路径前缀。
如果你刚刚开始学习 Go 模块, Create a Go module 教程可能是一个不错的起点。
答案 1 :(得分:0)
谢谢。我正在迁移一个现有项目,并遇到更改软件包导入的问题。我现在正在工作
答案 2 :(得分:0)
我有一个类似的问题。我看到的答案似乎只适用于非常简单的目录结构。但是在大型项目中很容易得到复杂的结构。考虑这样的模块结构:
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 "github.com/quotes-service/quotes/middleware"
通过从github仓库下载middleware
来满足这些导入依赖,这不是我想要的。我不知道如何简单地解决这个问题。似乎必须在模块的每个子目录中放置带有替换指令的 go.mod 文件。