Ich arbeite an einer kleinen Webanwendung in Go, die als Tool auf dem Computer eines Entwicklers verwendet werden soll, um das Debuggen seiner Anwendungen / Webdienste zu unterstützen. Die Schnittstelle zum Programm ist eine Webseite, die nicht nur HTML, sondern auch JavaScript (für die Funktionalität), Bilder und CSS (für das Styling) enthält. Ich plane, diese Anwendung als Open-Sourcing-Lösung zu verwenden, damit Benutzer einfach ein Makefile ausführen können und alle Ressourcen dorthin gelangen, wo sie benötigt werden. Ich möchte aber auch einfach eine ausführbare Datei mit so wenig Dateien / Abhängigkeiten wie möglich verteilen können. Gibt es eine gute Möglichkeit, HTML / CSS / JS mit der ausführbaren Datei zu bündeln, sodass Benutzer nur eine Datei herunterladen und sich um sie kümmern müssen?
Im Moment sieht das Bereitstellen einer statischen Datei in meiner App ungefähr so aus:
// called via http.ListenAndServe
func switchboard(w http.ResponseWriter, r *http.Request) {
// snipped dynamic routing...
// look for static resource
uri := r.URL.RequestURI()
if fp, err := os.Open("static" + uri); err == nil {
defer fp.Close()
staticHandler(w, r, fp)
return
}
// snipped blackhole route
}
Es ist also ziemlich einfach: Wenn die angeforderte Datei in meinem statischen Verzeichnis vorhanden ist, rufen Sie den Handler auf, der die Datei einfach öffnet und versucht, Content-Type
vor dem Serving ein Gut festzulegen. Mein Gedanke war, dass es keinen Grund gibt, warum dies auf dem realen Dateisystem basieren muss: Wenn es kompilierte Ressourcen gäbe, könnte ich sie einfach anhand der Anforderungs-URI indizieren und als solche dienen.
Wenn es keinen guten Weg gibt, dies zu tun, oder ich den falschen Baum belle, indem ich versuche, dies zu tun, lassen Sie es mich wissen. Ich dachte nur, der Endbenutzer würde es begrüßen, wenn so wenig Dateien wie möglich verwaltet werden könnten.
Wenn es passendere Tags als gibt gehen, zögern Sie nicht, sie hinzuzufügen oder lassen Sie es mich wissen.
go generate
, die Dateien mit einem kleinen Befehlszeilenprogramm (zusammen mit meinem Quellcode) in []byte
Slices zu konvertieren, die als Variablen in den Code eingebettet sind, ähnlich wie dies der stringer
Fall ist (siehe blog.golang.org) / generieren ).