在某个随机文件夹内,有 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贡献1802条经验 获得超10个赞
Go Wiki:模块:go.mod
exclude
和replace
指令仅在当前(“主”)模块上运行。构建主模块时,将忽略主模块以外的模块中的指令exclude
和指令。replace
因此,replace
andexclude
语句允许主模块完全控制自己的构建,而不受依赖项的完全控制。(有关何时使用指令的讨论,请参阅下面的常见问题解答)。replace
并且在Command go: 主模块和构建列表中:
主模块的 go.mod 文件通过 require、replace 和 exclude 语句定义了 go 命令可用的精确包集。通过以下 require 语句找到的依赖模块也有助于定义该组包,但仅通过其 go.mod 文件的 require 语句:依赖模块中的任何替换和排除语句都将被忽略。因此,replace 和 exclude 语句允许主模块完全控制它自己的构建,而不受依赖项的完全控制。
a
构建模块时找不到包c
,因此该go
工具尝试解决它,尝试下载它。这就是为什么它试图将包名解释为应该以主机名开头的东西。
您不需要将包重命名a
为example.com/a
,但必须在's中添加一个replace
指令,告诉您包所在的位置。c
go.mod
a
- 1 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消