首页  >  文章  >  后端开发  >  为什么 Go Modules 会抛出“没有版本的替换模块必须是目录路径(rooted 或以...开头)”错误?

为什么 Go Modules 会抛出“没有版本的替换模块必须是目录路径(rooted 或以...开头)”错误?

Susan Sarandon
Susan Sarandon原创
2024-11-05 17:56:021000浏览

Why does Go Modules throw the

go 模块 - “没有版本的替换模块必须是目录路径(根目录或以...开头”)Glitch

在上下文中在 go 模块中,replace 指令允许您用本地路径替换模块。但是,该指令有一个特定的要求:路径必须是根路径(以“/”开头)或相对于模块的根路径。

理解问题

在所提供的场景中,尝试在 go 模块 (goweb) 中使用本地包 (mypack) 会导致错误:“没有版本的替换模块必须是目录路径(以 root 为根或以 . 开头)”此错误表明路径为替换指令指定的格式不符合要求的格式。

解决问题

要解决此问题,请确保替换指令的路径满足以下条件:

  • 必须是绝对路径(以“/”开头)。
  • 如果是相对路径,则必须是相对于模块根目录(包含模块的目录) go.mod 文件)。

解决方案

对于 goweb 模块,由于 mypack 是其根目录的同级目录,因此正确的替换指令是:

<code class="go">replace mypack => ../mypack</code>

此外,为了使此替换有效工作,还必须通过在其目录中添加 go.mod 文件将 mypack 转换为 go 模块。这可以通过在 mypack 目录中运行命令 go mod init mypack 来完成。

其他注意事项

如果应用程序和它使用的包是同一个包的一部分go 模块,无需将其添加到 go.mod 中。只需引用代码中的包就足够了。

资源

  • [替换 Go 模块中的指令](https://go.dev/ref /mod#hdr-Replace_Directives)
  • [如何在另一个模块中使用“GOPATH”之外的模块?](https://stackoverflow.com/questions/52576751/how-to-use-另一个模块中的 gopath 之外的模块)

以上是为什么 Go Modules 会抛出“没有版本的替换模块必须是目录路径(rooted 或以...开头)”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn