Ich probiere das neue Modulsystem von Go aus und habe Probleme beim Zugriff auf lokale Pakete. Das folgende Projekt befindet sich in einem Ordner auf meinem Desktop außerhalb meines Gopathen.
Meine Projektstruktur sieht aus wie:
/
- /platform
- platform.go
- main.go
- go.mod
// platform.go
package platform
import "fmt"
func Print() {
fmt.Println("Hi")
}
// main.go
package main
import "platform"
func main() {
platform.Print()
}
go build main.go
sagt mir
cannot find module for path platform
Antworten:
Ich würde Ihnen dringend empfehlen, die Toolchain go zu verwenden, mit der diese Probleme sofort behoben werden können. Visual Studio Code mit dem vscode-go Plugin ist wirklich nützlich.
Das Problem hierbei ist, dass Go relative Pfade in Bezug auf Ihre
$GOPATH/src
odermodule
in import-Anweisung benötigt. Je nachdem, wo Sie sich in Ihrem befindenGOPATH
, sollte der Importpfad dies auch enthalten. In diesem Fall muss die import-Anweisung den Pfad des go-Moduls enthaltengo.mod
GOPATH
Angenommen, Ihr Projekt befindet sich hier:
Ihr Importpfad sollte sein:
import "github.com/myuser/myproject/platform"
VGO
Angenommen, Ihre go.mod-Datei lautet:
Ihr Importpfad sollte sein:
import "example.com/myuser/myproject/platform"
quelle
go.mod
Datei auf der Festplatte gefunden, sofern die Importpfade vollständige Importpfade sind, die mit dem Modulnamen beginnen (z. B.import "github.com/my/module/pkg
"`). Wenn Sie Pakete in anderen Modulen suchen möchten, die sich an anderer Stelle auf Ihrer Festplatte befinden, kommt hier eine Ersetzungsanweisung insLassen Sie mich dies zunächst
modules
als Sammlungen von definierenpackages
. In Go 11 verwende ich Go-Module wie die folgenden:Wenn sich beide Pakete im selben Projekt befinden, können Sie einfach Folgendes tun: In
go.mod
:module github.com/userName/moduleName
und in deinem
main.go
import "github.com/userName/moduleName/platform"
Wenn es sich jedoch um separate Module handelt, dh um unterschiedliche physische Pfade, und Sie dennoch lokal importieren möchten,
packages
ohne dies beispielsweise remote in Github zu veröffentlichen, können Sie dies mithilfe derreplace
Direktive erreichen.Angesichts des Modulnamens ist
github.com/otherModule
undplatform
, wie Sie es genannt haben, das einzige Paket darin. Fügen Sie in Ihrem Hauptmodulgo.mod
die folgenden Zeilen hinzu:module github.com/userName/mainModule require "github.com/userName/otherModule" v0.0.0 replace "github.com/userName/otherModule" v0.0.0 => "local physical path to the otherModule"
Hinweis: Der Pfad sollte auf das Stammverzeichnis des Moduls verweisen und kann absolut oder relativ sein.
Im Inneren
main.go
, um ein bestimmtes Paket wieplatform
von zu importierenotherModule
:import "github.com/userName/otherModule/platform"
Hier ist eine sanfte Einführung in Golang-Module
quelle