Heim >Backend-Entwicklung >Golang >So schreiben Sie 40​​4 in Golang um

So schreiben Sie 40​​4 in Golang um

WBOY
WBOYnach vorne
2024-02-08 21:30:191212Durchsuche

如何在 Golang 中重写 40​​4

In Golang ist das Umschreiben der 404-Fehlerseite eine häufige Anforderung, die uns dabei helfen kann, benutzerfreundlichere und personalisiertere Fehlermeldungen bereitzustellen. In diesem Artikel stellt Ihnen der PHP-Editor Xigua vor, wie Sie die 404-Seite in Golang neu schreiben. Wir werden das Gin-Framework verwenden, um Webanwendungen zu erstellen und 404-Fehler durch benutzerdefinierte Middleware zu behandeln. Mithilfe der Anleitung dieses Artikels erfahren Sie, wie Sie die 404-Seite einfach und schnell umschreiben, um die Benutzererfahrung zu verbessern. Lasst uns beginnen!

Frageninhalt

Ich lerne immer noch, wie man Go für die Webentwicklung verwendet, aber wenn ich versuche, eine einfache Website zu erstellen, stoße ich auf folgende Schwierigkeiten:

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)
}
Es gibt einen Konflikt zwischen

http.FileServerhttp.HandleFunc.

Zum Beispiel, wenn ich schreibe: http.ListenAndServe(":80", nil) 时,所有路由 (http.HandleFunc) wird beides funktionieren, aber wenn ich versuche, Folgendes zu tun:

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

Keine Route ist gültig (außer http.HandleFunc("/")). Warum?

Wie überschreibe ich die 404-Fehlerseite? Ich wünschte, Go hätte eine Methode wie http.HandleError, die die Schnittstellen http.ResponseWriter und http.Request akzeptiert, aber ich kann sie nicht finden sowas ähnliches. http.HandleError 这样的方法,它接受 http.ResponseWriterhttp.Request 的接口,但我找不到类似的东西。

解决方法

检查 http.ListenAndServeProblemumgehung

Überprüfen Sie die Dokumentation von http.ListenAndServehandler 为 nil,则将使用默认处理程序 http.HandleFunc:

Wenn

DefaultServeMux 注册了两条路由;调用 http.ListenAndServe(":80", nil) 使用默认处理程序(您添加了路由),因此 /test 可以工作(更多信息如下!)。但是,当您运行 http.ListenAndServe(":80", fs) 时,您将传入一个特定的处理程序 (fs:

In Ihrem Code verwenden Sie also http.ListenAndServe(":80", nil)), damit alle Anfragen an diesen Handler gesendet werden (er versucht, die Datei aus dem lokalen Dateisystem bereitzustellen).

Von diesem Punkt an gehe ich davon aus, dass verwendet wird (da es keinen Sinn macht, Handler hinzuzufügen und sie dann nicht zu verwenden). ServeMux oben erwähnt

/test/ 长,因此优先)。这意味着对 /test 的请求将触发 fmt.Fprint(w, "测试页") ,其他所有内容将调用加载 index.html 的处理程序。需要注意的是,您尚未添加引用 fsalso schauen wir uns das Dokument an:).

Wie erstelle ich eine Golang-Weiterleitung zum Front-End-Routing? 🎜🎜 🎜

Das obige ist der detaillierte Inhalt vonSo schreiben Sie 40​​4 in Golang um. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen