Frage Go build: "Paket kann nicht gefunden werden" (obwohl GOPATH gesetzt ist)


Obwohl ich GOPATH richtig eingestellt habe, kann ich immer noch nicht "go build" oder "go run" bekommen, um meine eigenen Pakete zu finden. Was mache ich falsch? Ich danke dir sehr!

$ echo $GOROOT
/usr/local/go

$ echo $GOPATH
/home/mitchell/go

$ cat ~/main.go
package main
import "foobar"
func main() { }

$ cat /home/mitchell/go/src/foobar.go
package foobar

$ go build main.go
main.go:3:8: import "foobar": cannot find package

76
2017-11-03 22:15


Ursprung


Antworten:


Es funktioniert nicht, weil dein foobar.go Die Quelldatei befindet sich nicht in einem aufgerufenen Verzeichnis foobar. go build und go install Versuchen Sie, Verzeichnisse zu vergleichen, keine Quelldateien.

  1. einstellen $GOPATH in ein gültiges Verzeichnis, z.B. export GOPATH="$HOME/go"
  2. Bewegung foobar.go zu $GOPATH/src/foobar/foobar.go und Gebäude sollte gut funktionieren.

Zusätzliche empfohlene Schritte:

  1. Hinzufügen $GOPATH/bin zu deinem $PATH durch: PATH="$GOPATH/bin:$PATH"
  2. Bewegung main.go in einen Unterordner von $GOPATH/src, z.B. $GOPATH/src/test
  3. go install test sollte jetzt eine ausführbare Datei in erstellen $GOPATH/bin das kann durch Tippen aufgerufen werden test in dein Terminal.

101
2017-11-04 22:26



Edit: seit du GOPATH gemeint hast, siehe Fasmatist es Antworten (upoted)

Wie in "Wie kann ich mein Paket finden?", Sie müssen ein Paket stellen xxx in einem Verzeichnis xxx.

Siehe die Sprachspezifikation:

package math

Eine Reihe von Dateien, die dasselbe teilen PackageName Bilden Sie die Implementierung eines Pakets.
  Eine Implementierung erfordert möglicherweise, dass alle Quelldateien für ein Paket im selben Verzeichnis enthalten sind.

Das Code-Organisation Erwähnungen:

Beim Erstellen eines Programms, das das Paket importiert "widget" das go Befehl sucht nach src/pkg/widget innerhalb des Go-Stamms, und dann - wenn die Paketquelle dort nicht gefunden wird - sucht es src/widget in jedem Arbeitsbereich in der Reihenfolge.

(Ein "Arbeitsbereich" ist ein Pfadeintrag in Ihrem GOPATH: Diese Variable kann mehrere Pfade für Ihre 'src, bin, pkg' sein)


(Ursprüngliche Antwort)

Sie sollten auch einstellen GOPATH zu / gehen, nicht GOROOT, wie in "Wie schreibe ich Go-Code".

Der Go-Pfad wird zum Auflösen von Importanweisungen verwendet. Es wird im go / build-Paket implementiert und dokumentiert.

Das GOPATH Umgebungsvariable listet Orte auf, auf denen nach Go-Code gesucht werden soll.
  Unter Unix ist der Wert eine durch Doppelpunkt getrennte Zeichenfolge.
  Unter Windows ist der Wert eine durch Strichpunkte getrennte Zeichenfolge.
  In Plan 9 ist der Wert eine Liste.

Das ist anders als GOROOT:

Die Go-Binärdistributionen gehen davon aus, dass sie in installiert werden /usr/local/go (oder c:\Go unter Windows), aber es ist möglich, sie an einem anderen Ort zu installieren.
  Wenn Sie dies tun, müssen Sie die GOROOT Umgebungsvariable für dieses Verzeichnis bei Verwendung der Go-Tools.


7
2017-11-03 22:30



TL; DR: Folge Go-Konventionen! (Lektion gelernt auf die harte Tour), nach alten Versionen suchen und Löschen Sie. Installieren Sie die neueste Version.

Für mich war die Lösung anders. Ich arbeitete auf einem freigegebenen Linux-Server und nach der Überprüfung meiner GOPATH und andere Umgebungsvariablen mehrmals hat es immer noch nicht funktioniert. Ich habe mehrere Fehler gefunden, darunter "Paket nicht finden" und "nicht erkannter Importpfad". Nach dem Versuch, mit neu zu installieren Dies Lösung durch die Anweisungen auf golang.de (einschließlich der deinstallieren Teil) noch auf Probleme gestoßen.

Ich habe mir etwas Zeit genommen, um festzustellen, dass es immer noch eine alte Version gibt, die nicht deinstalliert wurde (läuft go version dann which go wieder ... DAHH) was mich dazu gebracht hat Dies Frage und schließlich gelöst.


2
2018-01-31 07:43



Haben Sie versucht, das absolute Verzeichnis von hinzuzufügen gehen auf deinen 'Weg'?

export PATH=$PATH:/directory/to/go/

-2
2017-11-04 08:53