Maison >développement back-end >Golang >Comment servir à la fois une page d'accueil et du contenu statique à partir du répertoire racine dans Go ?

Comment servir à la fois une page d'accueil et du contenu statique à partir du répertoire racine dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 11:05:10193parcourir

How to Serve Both a Homepage and Static Content from the Root Directory in Go?

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!

Déclaration:
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