Heim >Backend-Entwicklung >Golang >Warum führt das Importieren einer Datei aus einem Unterordner zu einem „undefinierten' Fehler in Go, und wie können Go-Module verwendet werden, um ihn zu beheben und gleichzeitig eine modulare Projektstruktur beizubehalten?
Navigation
Wir möchten unser Projekt mit der folgenden Struktur gestalten:
├── main.go └── models └── user.go
In diesem Layout importiert main.go die Datei user.go, die den Benutzertyp definiert. Der Compiler warnt jedoch, dass der Benutzer im Hauptpaket nicht definiert ist.
Frage
Warum tritt dieser Fehler auf und wie können wir ihn beheben und gleichzeitig eine modulare Projektstruktur beibehalten?
Antwort
Das Problem ist auf das Fehlen einer Moduldefinition im Projekt zurückzuführen. Vor Go 1.11.1 verließ sich Go auf die Umgebungsvariable $GOPATH, was zu Komplexitäten bei der Verwaltung von Projektabhängigkeiten führte.
Go-Module, die in Go 1.11.1 eingeführt und in Go 1.11.3 standardmäßig aktiviert wurden, adressieren dieses Problem. Durch die Aktivierung von Modulen (über die Umgebungsvariable GO111MODULE=on) können wir modulare Projekte mit versionierten Abhängigkeiten und hierarchischer Organisation erstellen.
Lösung
Um Go-Module zu nutzen, befolgen Sie diese Schritte:
Erstellen Sie einen go.mod Datei:
/Users/myuser/Projects/my-project/ ├── go.mod ├── main.go └── src/ └── models/ └── user.go
user.go importieren main.go:
Probe main.go:
package main import ( "fmt" "main/src/models/user" ) func main() { fmt.Println(user.User{"new_user"}) }
Beispiel user.go:
package user type User struct { Login string }
Diese Struktur ermöglicht es uns, den Benutzertyp aus der Datei models/user.go in die Datei main.go zu importieren. Die Datei go.mod definiert den Modulnamen und dient als Stammverzeichnis des Projekts.
Das obige ist der detaillierte Inhalt vonWarum führt das Importieren einer Datei aus einem Unterordner zu einem „undefinierten' Fehler in Go, und wie können Go-Module verwendet werden, um ihn zu beheben und gleichzeitig eine modulare Projektstruktur beizubehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!