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

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

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 16:03:11672parcourir

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

Servir la page d'accueil et le contenu statique à partir de la racine

Dans Go, diffuser du contenu statique à partir du répertoire racine tout en conservant un gestionnaire racine pour la page d'accueil peut être réalisé en suivant les étapes suivantes :

Gérer les fichiers du répertoire racine Explicitement

Créez une fonction, telle que serveSingle, pour servir des fichiers individuels situés dans le répertoire racine. Cette approche convient aux fichiers tels que sitemap.xml, favicon.ico et robots.txt qui sont généralement censés être présents à la racine :

func serveSingle(pattern string, filename string) {
    http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, filename)
    })
}

Enregistrer les gestionnaires de fichiers

Enregistrez la fonction serveSingle pour gérer les demandes de fichiers spécifiques à la racine répertoire :

serveSingle("/sitemap.xml", "./sitemap.xml")
serveSingle("/favicon.ico", "./favicon.ico")
serveSingle("/robots.txt", "./robots.txt")

Servir le contenu statique à partir d'un sous-répertoire

Utilisez http.FileServer pour diffuser le contenu statique à partir d'un sous-répertoire, tel que "/static/":

http.Handle("/static", http.FileServer(http.Dir("./static/")))

Enregistrer le gestionnaire de la page d'accueil

S'inscrire le gestionnaire racine, tel que HomeHandler, pour gérer les requêtes pour la page d'accueil à "/":

http.HandleFunc("/", HomeHandler)

Exemple de code

La combinaison de ces techniques donne 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

    serveSingle("/sitemap.xml", "./sitemap.xml")
    serveSingle("/favicon.ico", "./favicon.ico")
    serveSingle("/robots.txt", "./robots.txt")

    http.Handle("/static", http.FileServer(http.Dir("./static/")))

    http.ListenAndServe(":8080", nil)
}

En gérant explicitement les fichiers du répertoire racine tout en diffusant du contenu statique à partir d'un sous-répertoire distinct, vous pouvez maintenir à la fois la gestion de la page d'accueil et le contenu statique servir avec un comportement similaire aux serveurs Web comme Apache et Nginx.

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