Servir du contenu statique à partir de la racine tout en conservant le gestionnaire de page d'accueil
Dans Golang, servir du contenu statique à partir du répertoire racine et gérer la page d'accueil avec un gestionnaire dédié Le gestionnaire pose un défi.
Traditionnellement, un simple serveur Web utilisait http.HandleFunc pour enregistrer le gestionnaire de page d'accueil. comme ceci :
http.HandleFunc("/", HomeHandler)
Cependant, lorsque vous tentez de diffuser du contenu statique à partir du répertoire racine à l'aide de http.Handle, une panique se produit en raison d'enregistrements en double pour "/".
Approche alternative : servir des fichiers racine explicites
Une solution consiste à éviter d'utiliser http.ServeMux et à servir explicitement chaque fichier dans le répertoire racine. Cette approche fonctionne bien pour les fichiers racine obligatoires tels que sitemap.xml, favicon.ico et 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) }
Cette approche garantit que seuls les fichiers racine spécifiques sont servis explicitement, tandis que d'autres ressources peut être déplacé vers un sous-répertoire et servi via le middleware http.FileServer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!