Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menulis semula 404 dalam Golang
Di Golang, menulis semula halaman ralat 404 ialah keperluan biasa, yang boleh membantu kami memberikan gesaan ralat yang lebih mesra dan diperibadikan. Dalam artikel ini, editor PHP Xigua akan memperkenalkan kepada anda cara menulis semula halaman 404 di Golang. Kami akan menggunakan rangka kerja Gin untuk membina aplikasi web dan mengendalikan ralat 404 melalui perisian tengah tersuai. Melalui panduan artikel ini, anda akan belajar cara menulis semula halaman 404 dengan mudah dan cepat untuk meningkatkan pengalaman pengguna. Mari mulakan!
Saya masih belajar cara menggunakan Go untuk pembangunan web, tetapi apabila saya cuba mencipta tapak web yang mudah, saya menghadapi kesukaran berikut:
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) }Terdapat konflik antara
http.FileServer
和 http.HandleFunc
.
Sebagai contoh, apabila saya menulis: http.ListenAndServe(":80", nil)
时,所有路由 (http.HandleFunc
) kedua-duanya akan berfungsi, tetapi jika saya cuba melakukan perkara berikut:
http.ListenAndServe(":80", http.FileServer(http.Dir("")))
Tiada laluan yang sah (kecuali http.HandleFunc("/"))
. Mengapa?
Bagaimana untuk mengatasi halaman ralat 404? Saya harap Go mempunyai kaedah seperti http.HandleError
yang menerima antara muka http.ResponseWriter
dan http.Request
tetapi saya tidak menemuinya sesuatu yang serupa. http.HandleError
这样的方法,它接受 http.ResponseWriter
和 http.Request
的接口,但我找不到类似的东西。
检查 http.ListenAndServe
Penyelesaian
Semak dokumentasi http.ListenAndServe:<code>handler
为 nil,则将使用默认处理程序 http.HandleFunc
Jika
: DefaultServeMux
注册了两条路由;调用 http.ListenAndServe(":80", nil)
使用默认处理程序(您添加了路由),因此 /test
可以工作(更多信息如下!)。但是,当您运行 http.ListenAndServe(":80", fs)
时,您将传入一个特定的处理程序 (fs
Jadi dalam kod anda, anda gunakan
) jadi semua permintaan akan dihantar kepada pengendali ini (ia akan cuba menyampaikan fail dari sistem fail tempatan). http.ListenAndServe(":80", nil)
sedang digunakan (sejak menambah pengendali dan kemudian tidak menggunakannya tidak benar-benar masuk akal).
ServeMux
disebutkan di atas
jadi mari kita semak dokumen:/test
比 /
长,因此优先)。这意味着对 /test
的请求将触发 fmt.Fprint(w, "测试页")
,其他所有内容将调用加载 index.html
的处理程序。需要注意的是,您尚未添加引用 fs
).
Atas ialah kandungan terperinci Bagaimana untuk menulis semula 404 dalam Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!