Go 模块与包

分享于2022年07月17日 go go-modules 问答
【问题标题】:Go 模块与包(Go Modules vs Package)
【发布时间】:2022-04-29 22:11:57
【问题描述】:

刚开始学习 Go 模块。我有一个关于在同一个模块中导入本地包的问题。我正在查看的示例是这个 repo:

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 如何知道查看本地原子包,而不是说 Github 上的那个?让我感到困惑的是,作为被修改模块的一部分的东西被远程/绝对 URI 引用。是否可以保证,如果我修改本地磁盘上的文件并构建,我实际上引用的是最新版本,而不是已经推送的内容?

作为一个玩具练习,我尝试使用不存在的 Github URI 创建一个模块,而事实上 go mod tidy 确实试图在 Github 上查找它,尽管实际上确实存在本地副本

  • 因为 go.mod 文件。 go.mod 文件包含模块的全名,因此构建系统知道不远程查找该模块中的包。为您的项目运行 go mod init
  • How to Write Go Code 带您通过一个示例模块演示其工作原理

【解决方案1】:

go.mod 文件中的 module directive 声明了该模块中所有包的导入路径前缀。

如果您刚刚开始学习 Go 模块,那么 Create a Go module 教程可能是一个不错的起点。