在维护主页处理程序的同时从根目录提供静态内容
在 Golang 中,从根目录提供静态内容并使用专用的处理主页handler 提出了挑战。
传统上,简单的 Web 服务器会使用 http.HandleFunc像这样注册主页处理程序:
http.HandleFunc("/", HomeHandler)
但是,当尝试使用 http.Handle 从根目录提供静态内容时,由于“/”的重复注册而发生恐慌。
替代方法:提供显式根文件
一种解决方案是避免使用http.ServeMux 并显式地提供根目录中的每个文件。此方法适用于强制基于根的文件,例如 sitemap.xml、favicon.ico 和 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) }
此方法可确保仅显式提供特定的基于根的文件,而其他资源可以移动到子目录并通过 http.FileServer 中间件提供服务。
以上是如何在 Go 中从根目录和主页处理程序提供静态内容?的详细内容。更多信息请关注PHP中文网其他相关文章!