Heim >Backend-Entwicklung >Golang >Wie stellt man statische Inhalte aus dem Stammverzeichnis und einem Homepage-Handler in Go bereit?
Statischen Inhalt aus dem Stammverzeichnis bereitstellen und gleichzeitig den Homepage-Handler beibehalten
In Golang statische Inhalte aus dem Stammverzeichnis bereitstellen und die Homepage mit einem dedizierten verwalten Handler stellt eine Herausforderung dar.
Traditionell würde ein einfacher Webserver http.HandleFunc verwenden, um den Homepage-Handler zu registrieren so:
http.HandleFunc("/", HomeHandler)
Beim Versuch, statischen Inhalt aus dem Stammverzeichnis mithilfe von http.Handle bereitzustellen, kommt es jedoch zu einer Panik aufgrund doppelter Registrierungen für „/“.
Alternativer Ansatz: Explizite Root-Dateien bereitstellen
Eine Lösung besteht darin, die Verwendung von http.ServeMux zu vermeiden und stattdessen jede Datei explizit im Root bereitzustellen Verzeichnis. Dieser Ansatz funktioniert gut für obligatorische Root-basierte Dateien wie sitemap.xml, favicon.ico und robots.txt.
package main import ( "fmt" "net/http" ) func HomeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "HomeHandler") } func serveSingle(pattern string, filename string) { http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, filename) }) } func main() { http.HandleFunc("/", HomeHandler) // homepage // Mandatory root-based resources serveSingle("/sitemap.xml", "./sitemap.xml") serveSingle("/favicon.ico", "./favicon.ico") serveSingle("/robots.txt", "./robots.txt") // Normal resources http.Handle("/static", http.FileServer(http.Dir("./static/"))) http.ListenAndServe(":8080", nil) }
Dieser Ansatz stellt sicher, dass nur bestimmte Root-basierte Dateien explizit bereitgestellt werden, während andere Ressourcen kann in ein Unterverzeichnis verschoben und über die http.FileServer-Middleware bereitgestellt werden.
Das obige ist der detaillierte Inhalt vonWie stellt man statische Inhalte aus dem Stammverzeichnis und einem Homepage-Handler in Go bereit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!