Statische Dateien per Webserver in Go ausliefern

Soll mit Go nicht nur ein Webserver entwickelt werden, der eine technische API zur Verfügung stellt, dann müssen meist auch statische Inhalte wie JavaScript-, CSS- oder Bild-Dateien ausgeliefert werden. Im Folgenden wird anhand eines Beispiels die Funktion kurz demonstriert.

Eine Einführung in die Entwicklung eines Webservers mit der Programmiersprache Go ist bereits im Artikel "Webserver mit Go" zu finden. Wie in wenigen Schritten neben dynamischen Inhalten auch statische Dateien ausgeliefert werden können ist im folgenden Beispiel zu sehen.

package main

import (
    "fmt"
    "net/http"
)

func index(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Willkommen")
}

func main() {
    http.HandleFunc("/", index)

    fs := http.FileServer(http.Dir("static/"))
    http.Handle("/static/", http.StripPrefix("/static/", fs))

    http.ListenAndServe(":8080", nil)
}

Mit dem Funktionsaufruf http.FileServer(http.Dir("static/")) wird ein neuer Dateiserver erstellt und gesagt, dass im Ordner static/ nach den Dateien gesucht werden soll. Anschließend wird ein neuer Handler für den Pfad /static/ des Webservers angelegt und der Dateiserver für die Bearbeitung der Anfragen übergeben. Zu beachten ist, dass von dem Über den Webserver angefragten Pfad mit der Funktion http.StripPrefix("/static/", fs) das führende /static abgeschnitten wird. Würde dies nicht gemacht werden, müssten die Dateien im Ordner static/static/ abgelegt werden.

Jetzt kann der Webserver gestartet werden.

$ go run web.go

Anschließen wird auf einer zweiten Konsole der Ordner static angelegt und die Datei test.txt erstellt. Anschließend wird die Datei per curl über den Webserver abgefragt.

$ mkdir static
$ echo "Test" > static/test.txt
$ curl http://localhost:8080/static/test.txt
Test

Wie zusehen ist, wurde die Datei erfolgreich abgerufen.

Fazit

Mit nur wenig zusätzlichem Aufwand liefert der Webserver jetzt auch statische Dateien aus. Dies ist für standalone Server durchaus sinnvoll. Wird ein anderer Webserver wie nginx oder Apache httpd als Proxy verwendet, lohnt es sich gegeben Falls die Dateien gleich über diesen auszuliefern.

Links

Verwandte Artikel