2016-08-02 4 views
-1

Ich fange an, mit Go zu experimentieren und ich stehe vor einem Problem, das (glaube ich) nicht in Sprachen, die verwenden eine virtuelle Maschine.Pfad, der mit go run funktioniert, funktioniert nicht mit go install/Aufruf der ausführbaren Datei von bin

Ich habe eine src/test/main.go Datei, die auf meine Vorlagen innerhalb src/test/views/ Ordner verweist. Wenn ich go run main.go verwenden es läuft, aber wenn go install tun und dann in meinem bin Ordner ausführen, um die ausführbare Datei (./test) Ich erhalte eine Fehlermeldung:

views/edit.html: no such file or directory 

Also, wie Go kompiliert mein Projekt (Datei/Ordner-Struktur verwandt) und wie man Pfade so benutzt, dass ich entweder go run und go install/executable benutzen kann?

+0

Wie wird der HTML-Code generiert? Weißt du, wo es zur Kompilierzeit ist? Sie könnten absolute Pfade verwenden oder als Befehlszeilenargument übergeben –

+0

@BenjaminKadish Ich habe Probleme, dies zu verstehen ... Zum Beispiel, wenn nur eine Binärdatei erstellt wird, nehme ich an, es hat alles drin, also Pfad, die für ok sind go run sollte ok sein für go install ... Ich werde mir die unten vorgeschlagenen Bibliotheken ansehen. –

Antwort

2

Wenn Sie in Ihrem Code einen relativen Pfad angeben, wie z. B. in views/edit.html, wird auch nach dem Binärstandort gesucht. Sie müssen den Pfad entweder absolut festlegen oder eine Logik verwenden, um festzustellen, wo sich Ihre Vorlagen befinden.

Eine andere Möglichkeit wäre, https://github.com/jteeuwen/go-bindata oder https://github.com/elazarl/go-bindata-assetfs zu verwenden, die Ihnen den Ärger sparen.

+0

Das Verschieben meiner Binärdatei in den gleichen Ordner wie 'main.go' würde das Problem lösen. Sehen Sie Probleme bei der Produktion oder ist es irrelevant? –

+0

Nun, ja, das ist ein sehr direkter Ansatz. Abhängig davon, wie du deine Binärdatei verteilen willst, könnte es jetzt funktionieren, es ist ziemlich abhängig :) Im Allgemeinen, wenn du es auf einem Unix-System ausführen willst, platziere die Binärdatei irgendwo in '/ usr/bin' oder'/usr/local/bin' wäre ratsam, und legen Sie statische Ressourcen irgendwo unter '/ usr/share/appname' oder so. Das kann mit Verpackung gelöst werden. Dann können Sie absolute Pfade verwenden. Im Idealfall würde ich sie mit vernünftigen Standardeinstellungen konfigurierbar machen. – favoretti