Home  >  Article  >  Backend Development  >  Why does Go Modules throw the "replacement module without version must be directory path (rooted or starting with...)" error?

Why does Go Modules throw the "replacement module without version must be directory path (rooted or starting with...)" error?

Susan Sarandon
Susan SarandonOriginal
2024-11-05 17:56:021000browse

Why does Go Modules throw the

go modules - "replacement module without version must be directory path (rooted or starting with...") Glitch

In the context of go modules, the replace directive allows you to replace a module with a local path. However, this directive has a specific requirement: the path must be either rooted (starting with "/") or relative to the module's root.

Understanding the Issue

In the scenario provided, an attempt to use a local package (mypack) within a go module (goweb) resulted in the error: "replacement module without version must be directory path (rooted or starting with .)" This error indicates that the path specified for the replace directive does not meet the required format.

Resolving the Issue

To resolve this issue, ensure that the path for the replace directive meets the following conditions:

  • It must be an absolute path (starting with "/").
  • If the path is relative, it must be relative to the module's root directory (the directory containing the go.mod file).

Solution

In the case of the goweb module, since mypack is a sibling of its root directory, the correct replace directive is:

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

Additionally, for this replacement to work effectively, mypack must also be converted into a go module by adding a go.mod file to its directory. This can be done by running the command go mod init mypack within the mypack directory.

Other Considerations

If the app and the package it uses are part of the same go module, adding it to go.mod is not necessary. Simply referring to the package within the code will suffice.

Resources

  • [Replace Directive in Go Modules](https://go.dev/ref/mod#hdr-Replace_Directives)
  • [How to use a module that is outside of "GOPATH" in another module?](https://stackoverflow.com/questions/52576751/how-to-use-a-module-that-is-outside-of-gopath-in-another-module)

The above is the detailed content of Why does Go Modules throw the "replacement module without version must be directory path (rooted or starting with...)" error?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn