首页 > 后端开发 > Golang > 正文

为什么Go模块出现'替换没有版本的模块必须是目录路径”错误?

Barbara Streisand
发布: 2024-11-07 06:14:02
原创
910 人浏览过

Why Does

Go 模块和替换的难以捉摸

在 Go 模块领域,replace 指令有望替代本地开发的包对于远程代码,您可以在试验或故障排除时使用自己的代码。然而,正如您所经历的那样,替换没有指定版本的包可能是一件令人烦恼的事情。

您遇到的错误消息“没有版本的替换模块必须是目录路径(以 . 开头或以 . 开头)” ,”强调了一个关键要求,即提供给替换指令的路径必须是绝对路径或相对于模块根的路径。

克服路径困惑

出现路径难题从 Go 模块的结构方式来看。 go.mod 文件作为核心,建立模块的标识及其依赖项。与 go.mod 文件位于同一模块中的包可以直接引用,无需替换。但是,在处理模块外部的包时,replace 指令就会发挥作用。

在您的例子中,您的目标是使用名为 mypack 的本地包。为了实现这一点,您在 go.mod 文件中指定了以下替换指令:

replace mypack -> ./src/mypack
登录后复制

不幸的是,该路径既不是绝对路径,也不是相对于模块根的路径。 “./”前缀表示相对于当前工作目录的路径,该路径与模块的根目录不同。

建立 Harmony 路径

到要纠正此问题,请按照以下步骤操作:

  1. 将 mypack 转换为 go 模块: 在 mypack 文件夹中创建一个 go.mod 文件。这会将 mypack 建立为独立模块。
  2. 指定绝对路径或相对于模块根的路径: 在 go.mod 文件中,修改替换指令以使用绝对或mypack 的相对路径。例如,如果 mypack 是模块根目录的同级,您可以使用:
replace mypack -> ../mypack
登录后复制

其他注意事项

请记住,replace 指令的目的是用于临时本地覆盖。如果您想进行永久替换,请考虑使用供应商工具或明确将 mypack 供应到您的模块中。

相关资源:

  • 如何使用模块位于另一个模块的“GOPATH”之外?

以上是为什么Go模块出现'替换没有版本的模块必须是目录路径”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!