Servir une page d'accueil et du contenu statique à partir de la racine dans Go
Dans Go, servir à la fois du contenu statique et une page d'accueil à partir du répertoire racine tout en gérant des Les URL nécessitent une approche sur mesure. Par défaut, l'enregistrement d'un gestionnaire pour le chemin racine ("/") entre en conflit avec la diffusion de contenu statique à partir du même répertoire.
Pour résoudre ce problème, une option consiste à utiliser une implémentation alternative de FileServer qui vérifie l'existence de un fichier avant de tenter de le servir. Pour les fichiers non présents, il peut s'en remettre au gestionnaire de la page d'accueil ou renvoyer une erreur 404.
Le code suivant illustre cette approche :
package main import ( "fmt" "net/http" "os" ) func HomeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "HomeHandler") } func exists(path string) bool { _, err := os.Stat(path) return !os.IsNotExist(err) } func FileServerWithFallback(dir string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { path := dir + r.URL.Path if exists(path) { http.ServeFile(w, r, path) return } } } func main() { http.HandleFunc("/", HomeHandler) // homepage http.Handle("/static/", FileServerWithFallback("./static")) http.ListenAndServe(":8080", nil) }
Dans ce code, la fonction exist vérifie si un le fichier existe à un chemin donné. Le gestionnaire FileServerWithFallback sert un fichier s'il existe dans le répertoire fourni. Sinon, cela permet à la demande d'être transmise au gestionnaire de page d'accueil.
En utilisant cette implémentation personnalisée de FileServer, le contenu statique peut être servi à partir du répertoire racine tout en permettant au gestionnaire de page d'accueil d'être invoqué comme prévu.
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!