How to rewrite 404 in Golang
In Golang, rewriting the 404 error page is a common requirement, which can help us provide more friendly and personalized error prompts. In this article, PHP editor Xigua will introduce to you how to rewrite the 404 page in Golang. We will use the Gin framework to build web applications and handle 404 errors through custom middleware. Through the guidance of this article, you will learn how to rewrite the 404 page simply and quickly to improve user experience. let's start!
Question content
I'm still learning how to use Go for web development, but when I try to create a simple website, I face the following difficulties:
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.FileServer
and http.HandleFunc
.
For example, when I write: http.ListenAndServe(":80", nil)
, all routes (http.HandleFunc
) will work, but if I try to execute The following operations:
http.ListenAndServe(":80", http.FileServer(http.Dir("")))
No route is valid (except http.HandleFunc("/"))
. Why?
How to override 404 error page? I wish Go had a method like http.HandleError
which accepts interfaces http.ResponseWriter
and http.Request
but I can't find anything similar thing.
Solution
Check the documentation for http.ListenAndServe
:
If handler
is nil, the default handler http.HandleFunc
will be used:
So, in your code, you registered two routes using DefaultServeMux
; calling http.ListenAndServe(":80", nil)
uses the default handler (that you Routes added) so /test
works (more info below!). However, when you run http.ListenAndServe(":80", fs)
you are passing in a specific handler (fs
) so all requests will be sent to This handler (which will try to serve the file from the local file system).
From this point on, I'm going to assume that http.ListenAndServe(":80", nil)
is being used (since adding handlers and then not using them doesn't really make sense).
mentioned aboveServeMux
So let’s check the documentation:
So the Mux receives the request and figures out which handler should be called to handle the request (note that only one handler will be called). Matching is based on the length of the pattern (so in your example /test
is longer than /
and therefore takes precedence). This means that a request to /test
will trigger fmt.Fprint(w, "test page")
and everything else will call loading index.html
handler. Note that you have not added a handler that references fs
, so the handler is not used (and the code will not compile - Use http.FileServer to handle custom 404 pages
The above is the detailed content of How to rewrite 404 in Golang. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Yes, H5 page production is an important implementation method for front-end development, involving core technologies such as HTML, CSS and JavaScript. Developers build dynamic and powerful H5 pages by cleverly combining these technologies, such as using the <canvas> tag to draw graphics or using JavaScript to control interaction behavior.

The method of customizing resize symbols in CSS is unified with background colors. In daily development, we often encounter situations where we need to customize user interface details, such as adjusting...

Regarding the reasons and solutions for misaligned display of inline-block elements. When writing web page layout, we often encounter some seemingly strange display problems. Compare...

Real-time Bitcoin USD Price Factors that affect Bitcoin price Indicators for predicting future Bitcoin prices Here are some key information about the price of Bitcoin in 2018-2024:

How to achieve the 45-degree curve effect of segmenter? In the process of implementing the segmenter, how to make the right border turn into a 45-degree curve when clicking the left button, and the point...

Tips for Implementing Segmenter Effects In user interface design, segmenter is a common navigation element, especially in mobile applications and responsive web pages. ...

How to use JavaScript or CSS to control the top and end of the page in the browser's printing settings. In the browser's printing settings, there is an option to control whether the display is...

Compatibility issues of multi-row overflow on mobile terminal omitted on different devices When developing mobile applications using Vue 2.0, you often encounter the need to overflow text...
