在維護主頁處理程序的同時從根目錄提供靜態內容
在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中文網其他相關文章!