首頁 > 後端開發 > Golang > 如何在Go的標準HTTP包中實作自訂404錯誤頁面?

如何在Go的標準HTTP包中實作自訂404錯誤頁面?

Barbara Streisand
發布: 2024-12-28 08:59:17
原創
884 人瀏覽過

How to Implement a Custom 404 Error Page in Go's Standard HTTP Package?

使用標準HTTP 套件顯示自訂404 錯誤頁面

當使用者要求不存在的URL 時,HTTP 伺服器通常會顯示基本的“404 頁面找不到”錯誤訊息。為了提供更多資訊或客製化的體驗,有必要實作自訂錯誤頁面處理程序。

Go 的標準 HTTP 套件中,存在一種機制來處理所有未處理的請求並顯示自訂錯誤頁面。讓我們深入研究如何實現這一點:

自訂錯誤處理函數

建立一個函數來處理自訂錯誤頁面。此函數採用三個參數:

  • w (http.ResponseWriter):用於傳送自訂錯誤頁面的回應編寫器。
  • r (*http.Request): 不存在的請求物件URL。
  • status (int):錯誤的狀態碼(通常為 http.StatusNotFound)。
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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板