Heim >Backend-Entwicklung >Golang >Warum wirft Go Modules den Fehler „Ersatzmodul ohne Version muss Verzeichnispfad sein (gerootet oder beginnend mit …)' aus?

Warum wirft Go Modules den Fehler „Ersatzmodul ohne Version muss Verzeichnispfad sein (gerootet oder beginnend mit …)' aus?

Susan Sarandon
Susan SarandonOriginal
2024-11-05 17:56:021089Durchsuche

Why does Go Modules throw the

go-Module – „Ersatzmodul ohne Version muss Verzeichnispfad sein (root oder beginnend mit …“) Glitch

Im Kontext Bei Go-Modulen können Sie mit der Anweisung „replace“ ein Modul durch einen lokalen Pfad ersetzen. Für diese Anweisung gilt jedoch eine besondere Anforderung: Der Pfad muss entweder im Stammverzeichnis (beginnend mit „/“) oder relativ zum Stammverzeichnis des Moduls angegeben sein.

Verstehen des Problems

Im bereitgestellten Szenario führte ein Versuch, ein lokales Paket (mypack) innerhalb eines Go-Moduls (goweb) zu verwenden, zu folgendem Fehler: „Ersatzmodul ohne Version muss Verzeichnispfad sein (gerootet oder beginnend mit .)“ Dieser Fehler gibt an, dass der Pfad Der für die Ersetzungsanweisung angegebene Pfad entspricht nicht dem erforderlichen Format.

Beheben des Problems

Um dieses Problem zu beheben, stellen Sie sicher, dass der Pfad für die Ersetzungsanweisung die folgenden Bedingungen erfüllt :

  • Es muss ein absoluter Pfad sein (beginnend mit „/“).
  • Wenn der Pfad relativ ist, muss er relativ zum Stammverzeichnis des Moduls sein (das Verzeichnis, das die enthält). go.mod-Datei).

Lösung

Im Fall des Goweb-Moduls ist die richtige Ersetzungsanweisung die richtige, da mypack ein Geschwister seines Stammverzeichnisses ist ist:

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

Damit dieser Ersatz effektiv funktioniert, muss mypack außerdem in ein Go-Modul konvertiert werden, indem eine go.mod-Datei zu seinem Verzeichnis hinzugefügt wird. Dies kann durch Ausführen des Befehls go mod init mypack im mypack-Verzeichnis erfolgen.

Andere Überlegungen

Wenn die App und das von ihr verwendete Paket Teil derselben sind go-Modul, das Hinzufügen zu go.mod ist nicht erforderlich. Ein einfacher Verweis auf das Paket im Code reicht aus.

Ressourcen

  • [Direktive in Go-Modulen ersetzen](https://go.dev/ref /mod#hdr-Replace_Directives)
  • [Wie verwende ich ein Modul, das außerhalb von „GOPATH“ liegt, in einem anderen Modul?](https://stackoverflow.com/questions/52576751/how-to-use- ein-Modul-das-außerhalb-von-gopath-in-einem-anderen-Modul ist)

Das obige ist der detaillierte Inhalt vonWarum wirft Go Modules den Fehler „Ersatzmodul ohne Version muss Verzeichnispfad sein (gerootet oder beginnend mit …)' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn