在 Go 中,您可以从根目录提供静态内容和主页。但是,当两种方法都注册到根 URL 时,就会出现冲突。
要提供静态内容,例如图像和 CSS,您需要使用 http.Handle 并提供http.目录。但是,如果您对根 URL 执行此操作,它将与主页处理程序冲突。
要提供主页,请使用 http.HandleFunc 并提供一个处理程序函数,该函数编写主页内容。
要解决冲突,请考虑提供服务明确特定的根文件。例如,您可以将 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) }
移动所有其他静态资源(例如 CSS、 JS) 到 /static 等子目录。然后,正常使用 http.Handle 和 http.Dir.
提供该子目录以上是在 Go 中从根目录提供静态内容和主页时如何避免冲突?的详细内容。更多信息请关注PHP中文网其他相关文章!