Import lokaler Pakete in Go: Schritt-für-Schritt-Anleitung mit Code

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum wirft der Import lokaler Pakete in Go so viele Fragen auf?

\n\n

Wenn Sie jemals versucht haben, Go-Code in separate Dateien und Ordner zu organisieren, sind Sie bestimmt auf einen Fehler wie could not import "myproject/utils" gestoßen. Dies ist eines der häufigsten Probleme bei Anfängern in der Go-Entwicklung. Auf Stack Overflow hat die Frage "How to import local packages in go?" tausende Aufrufe – und das aus gutem Grund.

\n\n

Im Gegensatz zu Python, wo es ausreicht, eine Datei daneben zu legen und import mymodule zu schreiben, erfordert Go eine klare Struktur und die richtige Konfiguration der Module. Aber wenn Sie diesen Mechanismus einmal verstanden haben, werden Sie feststellen, wie elegant er ist. Lassen Sie es uns ein für alle Mal klären.

\n\n

Kurze Theorie: Wie Go Pakete versteht

\n\n

Bevor Sie Code schreiben, merken Sie sich drei Schlüsselprinzipien:

\n\n
    \n
  • Go ist eine Sprache mit einer strengen Modulstruktur. Jedes Verzeichnis ist ein Paket (package).
  • \n
  • Der Paketname muss nicht mit dem Ordnernamen übereinstimmen, aber es wird dringend empfohlen, dies aus Gründen der Lesbarkeit zu tun.
  • \n
  • Der Import lokaler Pakete erfolgt seit 2019 über Module (Go modules). Vergessen Sie GOPATH – verwenden Sie go mod.
  • \n
\n\n

Kommen wir nun zur Praxis.

\n\n

Schritt 1: Projekt mit Modul erstellen

\n\n

Öffnen Sie ein Terminal und erstellen Sie einen neuen Ordner für Ihr Projekt:

\n\n
mkdir go-lokale-importe\ncd go-lokale-importe\n
\n\n

Initialisieren Sie nun das Modul. Der Modulname kann beliebig sein, aber es ist sinnvoll, einen Pfad zu verwenden, der eindeutig ist (z. B. ein Link zu einem Repository):

\n\n
go mod init github.com/ihr-benutzername/go-lokale-importe\n
\n\n

Nach diesem Befehl erscheint im Ordner die Datei go.mod. Sie wird die Abhängigkeiten verwalten – sowohl lokale als auch externe.

\n\n

Schritt 2: Lokales Paket erstellen

\n\n

Erstellen wir einen Ordner utils innerhalb des Projekts. Darin die Datei math.go:

\n\n
mkdir utils\ncd utils\ntouch math.go\n
\n\n

Öffnen Sie utils/math.go und schreiben Sie:

\n\n
package utils\n\n// Add gibt die Summe zweier Ganzzahlen zurück\nfunc Add(a, b int) int {\n    return a + b\n}\n
\n\n

Beachten Sie: Die Funktion Add wird groß geschrieben. In Go bedeutet dies, dass sie exportiert (öffentlich) ist. Wenn Sie add schreiben, wäre sie privat und von anderen Paketen aus nicht zugänglich.

\n\n

Schritt 3: Lokales Paket importieren und verwenden

\n\n

Gehen Sie zurück zum Stammverzeichnis des Projekts und erstellen Sie main.go:

\n\n
cd ..\ntouch main.go\n
\n\n

Inhalt von main.go:

\n\n
package main\n\nimport (\n    "fmt"\n    "github.com/ihr-benutzername/go-lokale-importe/utils"\n)\n\nfunc main() {\n    result := utils.Add(3, 5)\n    fmt.Println("Summe:", result)\n}\n
\n\n

Starten Sie nun das Programm:

\n\n
go run main.go\n
\n\n

Sie sollten Folgendes sehen:

\n\n
Summe: 8\n
\n\n

Es funktioniert! Wenn Sie jedoch einen Fehler erhalten haben, lesen Sie den nächsten Abschnitt.

\n\n

Typische Fehler und deren Lösung

\n\n

Fehler 1: "package is not in GOROOT"

\n\n

Sie sehen so etwas wie:

\n
package myproject/utils is not in GOROOT (/usr/local/go/src/myproject/utils)
\n\n

Ursache: Sie versuchen, ein Paket ohne Modul zu importieren. Go sucht es in der Standardbibliothek, nicht in Ihrem Projekt.

\n

Lösung: Stellen Sie sicher, dass sich go.mod im Stammverzeichnis des Projekts befindet. Wenn nicht, führen Sie go mod init modul-name aus.

\n\n

Fehler 2: "undefined: utils.Add"

\n\n

Ursache: Die Funktion wurde klein geschrieben (privat), oder Sie haben das Paket importiert, verwenden aber seinen Namen nicht.

\n

Lösung: Überprüfen Sie, ob alle benötigten Funktionen exportiert werden (groß geschrieben) und dass Sie auf sie mit dem Paketnamen zugreifen.

Blogs

Buchempfehlungen