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) }There is a conflict between
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!

Gohandlesinterfacesandtypeassertionseffectively,enhancingcodeflexibilityandrobustness.1)Typeassertionsallowruntimetypechecking,asseenwiththeShapeinterfaceandCircletype.2)Typeswitcheshandlemultipletypesefficiently,usefulforvariousshapesimplementingthe

Go language error handling becomes more flexible and readable through errors.Is and errors.As functions. 1.errors.Is is used to check whether the error is the same as the specified error and is suitable for the processing of the error chain. 2.errors.As can not only check the error type, but also convert the error to a specific type, which is convenient for extracting error information. Using these functions can simplify error handling logic, but pay attention to the correct delivery of error chains and avoid excessive dependence to prevent code complexity.

TomakeGoapplicationsrunfasterandmoreefficiently,useprofilingtools,leverageconcurrency,andmanagememoryeffectively.1)UsepprofforCPUandmemoryprofilingtoidentifybottlenecks.2)Utilizegoroutinesandchannelstoparallelizetasksandimproveperformance.3)Implement

Go'sfutureisbrightwithtrendslikeimprovedtooling,generics,cloud-nativeadoption,performanceenhancements,andWebAssemblyintegration,butchallengesincludemaintainingsimplicityandimprovingerrorhandling.

GoroutinesarefunctionsormethodsthatrunconcurrentlyinGo,enablingefficientandlightweightconcurrency.1)TheyaremanagedbyGo'sruntimeusingmultiplexing,allowingthousandstorunonfewerOSthreads.2)Goroutinesimproveperformancethrougheasytaskparallelizationandeff

ThepurposeoftheinitfunctioninGoistoinitializevariables,setupconfigurations,orperformnecessarysetupbeforethemainfunctionexecutes.Useinitby:1)Placingitinyourcodetorunautomaticallybeforemain,2)Keepingitshortandfocusedonsimpletasks,3)Consideringusingexpl

Gointerfacesaremethodsignaturesetsthattypesmustimplement,enablingpolymorphismwithoutinheritanceforcleaner,modularcode.Theyareimplicitlysatisfied,usefulforflexibleAPIsanddecoupling,butrequirecarefulusetoavoidruntimeerrorsandmaintaintypesafety.

Use the recover() function in Go to recover from panic. The specific methods are: 1) Use recover() to capture panic in the defer function to avoid program crashes; 2) Record detailed error information for debugging; 3) Decide whether to resume program execution based on the specific situation; 4) Use with caution to avoid affecting performance.


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

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

SublimeText3 English version
Recommended: Win version, supports code prompts!

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download
The most popular open source editor

SublimeText3 Chinese version
Chinese version, very easy to use
