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

如何解决本地模块的传递依赖

如何解决本地模块的传递依赖

Go
森栏 2023-08-14 17:15:57
在某个随机文件夹中,有 3 个文件夹 a、b、c。每个文件夹都包含一个 mod 文件。mod 文件包含以下内容。go.mod 里面module ago 1.13b 内的 go.modmodule bgo 1.13require a v0.0.0replace a v0.0.0 => ./../ac 内的 go.modmodule cgo 1.13require b v0.0.0replace b v0.0.0 => ./../b模块 b 没有抛出任何错误。但模块 c 抛出错误go: b@v0.0.0 requiresa@v0.0.0: unrecognized import path "a" (import path does not begin with hostname)每个模块的模块名称中都必须有一个点(.)。“一些随机文件夹”更改为 example.com。现在 example.com 命名的文件夹包含所有 abc 文件夹。这是模块现在的样子模块A看起来像module example.com/ago 1.13模块 B 看起来像module example.com/bgo 1.13require example.com/a v0.0.0replace example.com/a v0.0.0 => ../a模块 C 看起来像module example.com/cgo 1.13require example.com/b v0.0.0replace example.com/b v0.0.0 => ../b太糟糕了!错误!go: example.com/b@v0.0.0 requiresexample.com/a@v0.0.0: unrecognized import path "example.com/a" (https fetch: Get https://example.com/a?go-get=1: dial tcp 208.73.210.202:443: connect: connection refused)本地模块的传递依赖如何工作?为什么 Go 要访问 example.com 来引入模块?到底是怎么回事?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

Go Wiki:模块:go.mod

exclude指令replace仅在当前(“主”)模块上运行。构建主模块时,将忽略主模块以外的模块中的指令excludereplace因此, and语句允许主模块完全控制其自己的replace构建exclude,而不受依赖项的完全控制。(

同样在命令中:主模块和构建列表:

主模块的 go.mod 文件通过 require、replace 和 except 语句定义了可供 go 命令使用的精确包集。通过以下 require 语句找到的依赖模块也有助于定义该组包,但只能通过其 go.mod 文件的 require 语句:依赖模块中的任何替换和排除语句都将被忽略。因此,替换和排除语句允许主模块完全控制其自己的构建,而不受依赖项的完全控制。

a构建模块时找不到包c,因此该go工具尝试解决它,尝试下载它。这就是为什么它尝试将包名称解释为应以主机名开头的名称。

您不需要将包重命名aexample.com/a,但必须在s中添加一个replace指令来告诉包所在的位置。cgo.moda


查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信