GOPATH unter Ubuntu: Wie Sie sich nicht das Gehirn (und den Code) zerstören
Sie sind sicherlich schon darauf gestoßen: Sie haben gerade Go unter Ubuntu installiert, öffnen das Terminal, geben go run main.go ein, und als Antwort erhalten Sie Stille. Oder, noch schlimmer, ein rotes Meer von Fehlern mit der Erwähnung von GOPATH. Wenn Sie dieses Problem gegoogelt haben, haben Sie mit ziemlicher Sicherheit genau diese Frage auf Stack Overflow mit tausenden von Aufrufen gesehen: "How do I SET the GOPATH environment variable on Ubuntu? What file must I edit?". Kommt Ihnen der Schmerz bekannt? Willkommen im Club.
Ich selbst habe einmal einen halben Tag damit verbracht, zu verstehen, warum Go meine Pakete nicht sieht, obwohl ich "alles richtig gemacht" hatte. Spoiler: Ich habe es falsch gemacht. In diesem Artikel werden wir die Top-Fehler bei der Einrichtung von GOPATH unter Ubuntu analysieren, lernen, sie zu vermeiden, und schließlich die Umgebung so einrichten, dass sie wie ein Schweizer Uhrwerk funktioniert.
Was ist GOPATH und warum ist es immer noch wichtig?
Bevor wir in die Tiefe gehen, erinnern wir uns daran, was GOPATH ist. In der Welt von Go (insbesondere in Versionen vor 1.16) war dies die heilige Kuh. GOPATH ist der Pfad zum Go-Arbeitsverzeichnis, in dem Ihre Quellcodes, kompilierten Binärdateien und Drittanbieter-Pakete gespeichert werden. Standardmäßig wird es unter Ubuntu auf $HOME/go gesetzt, aber viele Entwickler (insbesondere diejenigen, die mit mehreren Projekten arbeiten) ändern es.
Mit dem Aufkommen von Go Modules (ab Go 1.11) ist die Notwendigkeit der manuellen Verwaltung von GOPATH gesunken, aber sie ist nicht vollständig verschwunden. Wenn Sie mit alten Projekten arbeiten, go get verwenden oder einfach möchten, dass go install Binärdateien an einem praktischen Ort ablegt, müssen Sie sich trotzdem mit dieser Variable anfreunden.
Top-5 Fehler bei der Einrichtung von GOPATH unter Ubuntu
Ich habe die häufigsten Fallstricke zusammengestellt, auf die Anfänger (und nicht nur sie) hereinfallen. Überprüfen Sie, ob Sie gerade auf einem dieser Hügel liegen.
Fehler Nr. 1: Bearbeiten der falschen Datei
Die häufigste Frage auf Stack Overflow. Benutzer gehen in /etc/environment, /etc/profile oder sogar in /etc/bash.bashrc. Ja, das funktioniert, aber es ist eine schlechte Praxis. Systemdateien sind für Systemeinstellungen. Ihr GOPATH ist eine persönliche Variable und gehört in Ihre Benutzerkonfigurationsdateien.
Richtig gemacht: Bearbeiten Sie ~/.bashrc (für Bash) oder ~/.profile (wenn Sie eine Login-Shell verwenden). Wenn Sie Zsh verwenden, ist es ~/.zshrc.
Fehler Nr. 2: Export vergessen
Ich sehe oft in Konfigurationen: GOPATH=$HOME/go ohne export. Ohne export wird die Variable nicht an untergeordnete Prozesse weitergegeben (einschließlich Ihrer IDE und go build).
Richtige Syntax:
export GOPATH=$HOME/goexport PATH=$PATH:$GOPATH/binFehler Nr. 3: Terminal nicht neu geladen
Sie haben .bashrc bearbeitet, gespeichert und sitzen dann da und starren auf ein leeres echo $GOPATH. Es wird keine Magie geschehen, bis Sie die Änderungen anwenden. Der Befehl source ~/.bashrc ist Ihr bester Freund.
Fehler Nr. 4: Konflikt mit Go Modules
Wenn Sie für jedes Projekt go mod init verwenden, kann GOPATH stören. Besonders wenn Sie versuchen, innerhalb von $GOPATH/src zu arbeiten. Modernes Go erfordert dies nicht, aber wenn Sie Ihr Projekt hartnäckig in ~/go/src/myproject ablegen, bereiten Sie sich auf unerwartete Fehler vor.
Fehler Nr. 5: Leerzeichen und Sonderzeichen im Pfad
Ubuntu erlaubt die Erstellung von Ordnern mit Leerzeichen. Tun Sie das nicht für Go. /home/user/My Projects/go ist ein Kopfschmerz. Verwenden Sie /home/user/projects/go oder einfach $HOME/go.
Schritt-für-Schritt-Anleitung: So richten Sie GOPATH richtig ein
Lassen Sie es uns ein für alle Mal erledigen. Öffnen Sie das Terminal und führen Sie die Befehle nacheinander aus.
Schritt 1. Überprüfen Sie die aktuelle Go-Version
go versionBlogs
Buchempfehlungen
Lesen Sie auch
Serverless-Funktionen in JavaScript: AWS Lambda von A bis Z
Wie man als C#-Entwickler einen Job bekommt: Tipps und Lebenslauf in der Praxis
Warum gibt es in Java keine Standardparameter? Eleganter Workaround
Der ternäre Operator in Kotlin: 5 Hauptfehler von Anfängern
Arbeit mit Aufgabenwarteschlangen in C#: Vollständiger Leitfaden