Serve homepage and static content from root

前端 未结 3 619
臣服心动
臣服心动 2020-12-02 07:07

In Golang, how do I serve static content out of the root directory while still having a root directory handler for serving the homepage.

Use the following simple web

3条回答
  •  甜味超标
    2020-12-02 07:52

    An alternative (not using ServeMux) solution is to serve explicitly each file located in the root directory. The idea behind is to keep the number of root-based files very small. sitemap.xml, favicon.ico, robots.txt are indeed mandated to be served out of the root :

    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)
    }
    

    Please move all other resources (CSS, JS, etc.) to a proper subdirectory, e.g. /static/ .

提交回复
热议问题