Maison >développement back-end >Golang >Comment diffuser du contenu statique à partir du répertoire racine et d'un gestionnaire de page d'accueil dans Go ?

Comment diffuser du contenu statique à partir du répertoire racine et d'un gestionnaire de page d'accueil dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-18 22:19:10126parcourir

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

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!

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