In Go, you can serve both static content and a homepage from the root directory. However, conflicts arise when both methods are registered for the root URL.
To serve static content, such as images and CSS, you need to use http.Handle and provide a http.Dir. However, if you do this for the root URL, it will conflict with the homepage handler.
To serve a homepage, use http.HandleFunc and provide a handler function that writes the homepage content.
To resolve the conflict, consider serving specific root files explicitly. For example, you can serve sitemap.xml, favicon.ico, and robots.txt as individual files.
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) }
Move all other static resources (e.g., CSS, JS) to a subdirectory like /static. Then, serve this subdirectory normally using http.Handle and http.Dir.
The above is the detailed content of How to Avoid Conflicts When Serving Static Content and a Homepage from the Root Directory in Go?. For more information, please follow other related articles on the PHP Chinese website!