Heim >Backend-Entwicklung >Golang >Wie stellt man statische Inhalte aus dem Stammverzeichnis und einem Homepage-Handler in Go bereit?

Wie stellt man statische Inhalte aus dem Stammverzeichnis und einem Homepage-Handler in Go bereit?

Susan Sarandon
Susan SarandonOriginal
2024-12-18 22:19:10126Durchsuche

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

Statischen Inhalt aus dem Stammverzeichnis bereitstellen und gleichzeitig den Homepage-Handler beibehalten

In Golang statische Inhalte aus dem Stammverzeichnis bereitstellen und die Homepage mit einem dedizierten verwalten Handler stellt eine Herausforderung dar.

Traditionell würde ein einfacher Webserver http.HandleFunc verwenden, um den Homepage-Handler zu registrieren so:

http.HandleFunc("/", HomeHandler)

Beim Versuch, statischen Inhalt aus dem Stammverzeichnis mithilfe von http.Handle bereitzustellen, kommt es jedoch zu einer Panik aufgrund doppelter Registrierungen für „/“.

Alternativer Ansatz: Explizite Root-Dateien bereitstellen

Eine Lösung besteht darin, die Verwendung von http.ServeMux zu vermeiden und stattdessen jede Datei explizit im Root bereitzustellen Verzeichnis. Dieser Ansatz funktioniert gut für obligatorische Root-basierte Dateien wie sitemap.xml, favicon.ico und 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)
}

Dieser Ansatz stellt sicher, dass nur bestimmte Root-basierte Dateien explizit bereitgestellt werden, während andere Ressourcen kann in ein Unterverzeichnis verschoben und über die http.FileServer-Middleware bereitgestellt werden.

Das obige ist der detaillierte Inhalt vonWie stellt man statische Inhalte aus dem Stammverzeichnis und einem Homepage-Handler in Go bereit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn