Maison > développement back-end > Golang > Comment servir une page d'accueil et des fichiers statiques à partir du répertoire racine dans Go sans conflits ?

Comment servir une page d'accueil et des fichiers statiques à partir du répertoire racine dans Go sans conflits ?

Mary-Kate Olsen
Libérer: 2024-12-26 11:53:10
original
382 Les gens l'ont consulté

How to Serve a Homepage and Static Files from the Root Directory in Go without Conflicts?

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("./")))
Copier après la connexion

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 :

  • sitemap.xml
  • favicon.ico
  • robots. txt

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal