首頁  >  文章  >  後端開發  >  如何在 Golang 中重寫 404

如何在 Golang 中重寫 404

WBOY
WBOY轉載
2024-02-08 21:30:191164瀏覽

如何在 Golang 中重写 40​​4

在Golang中,重寫404錯誤頁面是一個常見的需求,可以幫助我們提供更友善和個人化的錯誤提示。在本文中,php小編西瓜將向大家介紹如何在Golang中實現404頁面的重寫。我們將使用Gin框架來建立Web應用,並透過自訂中間件來處理404錯誤。透過本文的指導,您將學會如何簡單快速地重寫404頁面,提升使用者體驗。讓我們開始吧!

問題內容

我仍在學習如何使用 Go 進行 Web 開發,但是當我嘗試建立一個簡單的網站時,我面臨以下困難:

package main

import (
   "fmt"
   "html/template"
   "net/http"
)

func main() {

   fs := http.FileServer(http.Dir(""))

   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
       tmpl, _ := template.ParseFiles("index.html")
       tmpl.Execute(w, nil)
   })

   /**
   *    This route will return a 404 error
   */
   http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
       fmt.Fprint(w, "Test page")
   })

   /**
   *    If I replace fs to nil, /test route will be work, but non-existent routes
   *    will be return index.html template (home router) instead 404 error. Why?
   */

   http.ListenAndServe(":80", fs)
}

http.FileServerhttp.HandleFunc 之間有衝突。

例如,當我寫: http.ListenAndServe(":80", nil) 時,所有路由(http.HandleFunc) 都會工作,但如果我嘗試執行以下操作:

http.ListenAndServe(":80", http.FileServer(http.Dir("")))

#沒有路由有效(除了 http.HandleFunc("/"))。為什麼?

如何覆寫 404 錯誤頁面?我希望Go 有一個像http.HandleError 這樣的方法,它接受http.ResponseWriterhttp.Request 的接口,但我找不到類似的東西。

解決方法

檢查 http.ListenAndServe 的文件:

如果 handler 為 nil,則會使用預設處理程序 http.HandleFunc

因此,在您的程式碼中,您使用DefaultServeMux 註冊了兩條路由;呼叫http.ListenAndServe(":80", nil) 使用預設處理程序(您新增了路由),因此/test 可以工作(更多資訊如下!)。但是,當您執行http.ListenAndServe(":80", fs) 時,您將傳入一個特定的處理程序(fs),因此所有請求都會傳送到該處理程序(它將嘗試從本機檔案系統提供檔案)。

從這一點開始,我將假設 http.ListenAndServe(":80", nil) 正在被使用(因為添加處理程序然後不使用它們並沒有真正意義)。

上面提到的ServeMux所以讓我們檢查一下該文件:

因此,Mux 接收請求並計算出應該呼叫哪個處理程序來處理該請求(請注意,只會呼叫一個處理程序)。匹配基於模式的長度(因此,在您的範例中 /test/ 長,因此優先)。這意味著對/test 的請求將觸發fmt.Fprint(w, "測試頁") ,其他所有內容將呼叫載入index.html 的處理程序。需要注意的是,您尚未添加引用fs 的處理程序,因此該處理程序未使用(且程式碼將無法編譯- 使用 http.FileServer 處理自訂 404 頁面

  • 使用 Golang Mux Router 和 http.FileServer 實作預期的根檔案和自訂 404
  • 使用 Gorilla Mux 和 std http.FileServer 的自訂 404
  • #Golang。用什麼? http.ServeFile(..) 還是 http.FileServer(..)?
  • 如何讓golang重新導向到前端路由?
  • 以上是如何在 Golang 中重寫 404的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除