为了账号安全,请及时绑定邮箱和手机立即绑定

Go 模块与包

Go 模块与包

Go
饮歌长啸 2022-06-06 14:56:19
刚开始学习 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 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞


//img1.sycdn.imooc.com//629da52e0001c16c06570478.jpg

  • 模块是 go 包的集合。

  • 是 .go 文件的目录。使用包,您可以将代码组织成可重用的单元。

  • 我们可以添加一个模块去项目或升级模块版本。


查看完整回答
反对 回复 2022-06-06
?
不负相思意

TA贡献1777条经验 获得超10个赞

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

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


查看完整回答
反对 回复 2022-06-06
?
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 文件放在模块的每个子目录中。


查看完整回答
反对 回复 2022-06-06
  • 3 回答
  • 0 关注
  • 368 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号