Servir la page d'accueil et le contenu statique à partir du répertoire racine
Lors du développement d'un serveur Web dans Golang, vous pouvez rencontrer un défi lors de la diffusion de contenu statique du répertoire racine tout en disposant également d'un gestionnaire de répertoire racine pour servir la page d'accueil. Ce problème survient lorsque vous tentez d'ajouter un gestionnaire de fichiers statique tel que :
http.Handle("/", http.FileServer(http.Dir("./")))
Ce code entraînera probablement une panique en raison de plusieurs enregistrements pour le chemin "/".
Approche alternative : service de fichiers explicite
Au lieu de s'appuyer sur le serveur de fichiers intégré de Golang, une approche alternative consiste pour servir explicitement chaque fichier situé dans le répertoire racine. Cette méthode convient lorsque le nombre de fichiers basés sur la racine est minime, tels que les fichiers obligatoires tels que :
Pour y parvenir, vous pouvez utiliser le code suivant :
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) }
Dans ce code, nous définissons une fonction serveSingle pour gérer le service de fichiers individuels en fonction de leurs modèles de chemin. Nous servons ensuite manuellement les fichiers racine obligatoires et déplaçons toutes les ressources statiques supplémentaires vers un sous-répertoire (par exemple, /static/) qui est servi à l'aide du serveur de fichiers intégré de Golang. Cette approche permet une séparation nette entre le gestionnaire de page d'accueil et le service de fichiers statiques tout en évitant les conflits.
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!