當使用者要求不存在的URL 時,HTTP 伺服器通常會顯示基本的“404 頁面找不到”錯誤訊息。為了提供更多資訊或客製化的體驗,有必要實作自訂錯誤頁面處理程序。
Go 的標準 HTTP 套件中,存在一種機制來處理所有未處理的請求並顯示自訂錯誤頁面。讓我們深入研究如何實現這一點:
自訂錯誤處理函數
建立一個函數來處理自訂錯誤頁面。此函數採用三個參數:
func errorHandler(w http.ResponseWriter, r *http.Request, status int) { // Set the HTTP status code. w.WriteHeader(status) // Customize the error response for specific status codes. if status == http.StatusNotFound { fmt.Fprint(w, "Custom 404 error message") } }
設定自訂錯誤Handler
錯誤處理函數需要連結到HTTP伺服器。這是在 http.ListenAndServe 函數中完成的,該函數在指定連接埠上啟動伺服器。
http.ListenAndServe(":12345", nil)
將 nil 替換為處理所有請求的自訂 HTTP 請求處理程序。
http.ListenAndServe(":12345", new(http.ServeMux))
在 ServeMux 中,新增特定 URL 的原始路由處理程序。
mux := http.NewServeMux() mux.HandleFunc("/smth/", smthHandler) mux.HandleFunc("/", homeHandler) http.ListenAndServe(":12345", mux)
最後,加入NotFoundHandler 到 ServeMux 來處理特定路由處理程序未處理的所有其他 URL。
mux.NotFoundHandler = http.HandlerFunc(errorHandler)
範例程式碼
實作上述方法的完整範例程式碼是如下所示:
package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/smth/", smthHandler) mux.HandleFunc("/", homeHandler) mux.NotFoundHandler = http.HandlerFunc(errorHandler) http.ListenAndServe(":12345", mux) } func smthHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/smth/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "Welcome to smth") } func homeHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "Welcome home") } func errorHandler(w http.ResponseWriter, r *http.Request, status int) { w.WriteHeader(status) if status == http.StatusNotFound { fmt.Fprint(w, "Custom 404 error message") } }
此程式碼定義特定URL 的路由處理程序(/smth/和/) 並指派自訂錯誤處理函數(errorHandler) 來處理所有其他未處理的請求。當使用者嘗試存取不存在的 URL 時,將顯示自訂 404 錯誤頁面,而不是預設的「404 頁面未找到」訊息。
以上是如何在Go的標準HTTP包中實作自訂404錯誤頁面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!