Wie kann ich Dateien öffnen, die relativ zu meinem GOPATH?

Ich bin mit io/ioutil zu Lesen, eine kleine text-Datei:

fileBytes, err := ioutil.ReadFile("/absolute/path/to/file.txt")

Und das funktioniert auch, aber dies ist nicht wirklich tragbar. In meinem Fall, die Dateien, die ich öffnen will sind in meinem GOPATH, zum Beispiel:

/Users/matt/Dev/go/src/github.com/mholt/mypackage/data/file.txt

Da die data Ordner fährt direkt neben dem source-code, ich würde gerne geben Sie nur den relativen Pfad:

data/file.txt

Aber dann bekomme ich diesen Fehler:

Panik: öffnen data/file.txt: no such file or directory

Wie kann ich das öffnen von Dateien mit Ihrem relativen Pfad, vor allem, wenn Sie Leben neben meinem Go-code?

(Hinweis, dass meine Frage ist speziell zum öffnen von Dateien relativ zum GOPATH. Öffnen von Dateien mit beliebigen relativen Pfad in Go ist so einfach wie geben Sie den relativen Pfad statt einem absoluten Pfad; Dateien geöffnet sind, relativ zu den kompilierten binären Arbeitsverzeichnis. In meinem Fall, ich wollen, um Dateien zu öffnen, relativ zu dem die binary kompiliert wurde. Im Nachhinein ist dies eine schlechte design-Entscheidung.)

  • Die GOPATH hat keine große Bedeutung, sobald Ihr Programm wird kompiliert, und noch weniger, wenn Sie es zu verteilen.
  • Was Sie scheinen zu wollen, sieht eher aus wie etwas das einbetten von Dateien in die kompilierte Programm.
  • Art... außer ich will die Dateien von der Quelle getrennt. Die Dateien sind entscheidend für die Funktionalität des Programms. Wenn also jemand nach unten zieht mein source-code (mit den Daten-Dateien an der Seite) und kompiliert und es läuft, die Daten-Dateien geladen werden, über einen relativen Pfad, denn Sie existieren in der Nähe der source-code, oder in der Nähe, wo das Programm ausgeführt wird.
  • Die den kompilierten binären sollte keine Abhängigkeit von der Lage der Quell-Dateien, aber es wäre schön, wenn es war ein Weg, um erstellen Sie eine ausführbare Datei bündeln, die eine Kopie von externen Ressourcen, auf welche Pakete abhängen können.
  • Klingt gut für mich... ich bin etwas neues zu Gehen, und meine typische Herangehensweise an dieses (wie Python oder PHP) ist die Bündelung der Daten-Dateien mit dem source-code und verweisen Sie relativ. So zum Gehen, meine eigentliche Frage wäre: wie bekomme ich Zugang zu diesen externen Ressourcen? (Wenn Sie fehlen, natürlich würd ich handle auch entsprechend.)
  • ist es das, was fileembed-gehen tut das schon? (bitbucket.org/rj/fileembed-go)
  • Hier ist eine Frage über die Bündelung von Ressourcen, die ausreichen, obwohl dies nicht meine bevorzugte Methode in meinem Fall: stackoverflow.com/questions/13904441/... - oder dieses: stackoverflow.com/q/9443418/1048862

InformationsquelleAutor Matt | 2013-06-12
Schreibe einen Kommentar