search
HomeBackend DevelopmentGolangHow to rewrite 40​​4 in Golang

如何在 Golang 中重写 40​​4

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

  • Use Golang Mux Router and http.FileServer to achieve expected root files and custom 404
  • Custom 404 using Gorilla Mux and std http.FileServer
  • Golang. What to use? http.ServeFile(..) or http.FileServer(..)?
  • How to make golang redirect to front-end routing?
  • The above is the detailed content of How to rewrite 40​​4 in Golang. For more information, please follow other related articles on the PHP Chinese website!

    Statement
    This article is reproduced at:stackoverflow. If there is any infringement, please contact admin@php.cn delete
    Type Assertions and Type Switches with Go InterfacesType Assertions and Type Switches with Go InterfacesMay 02, 2025 am 12:20 AM

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

    Using errors.Is and errors.As for Error Inspection in GoUsing errors.Is and errors.As for Error Inspection in GoMay 02, 2025 am 12:11 AM

    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.

    Performance Tuning in Go: Optimizing Your ApplicationsPerformance Tuning in Go: Optimizing Your ApplicationsMay 02, 2025 am 12:06 AM

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

    The Future of Go: Trends and DevelopmentsThe Future of Go: Trends and DevelopmentsMay 02, 2025 am 12:01 AM

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

    Understanding Goroutines: A Deep Dive into Go's ConcurrencyUnderstanding Goroutines: A Deep Dive into Go's ConcurrencyMay 01, 2025 am 12:18 AM

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

    Understanding the init Function in Go: Purpose and UsageUnderstanding the init Function in Go: Purpose and UsageMay 01, 2025 am 12:16 AM

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

    Understanding Go Interfaces: A Comprehensive GuideUnderstanding Go Interfaces: A Comprehensive GuideMay 01, 2025 am 12:13 AM

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

    Recovering from Panics in Go: When and How to Use recover()Recovering from Panics in Go: When and How to Use recover()May 01, 2025 am 12:04 AM

    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.

    See all articles

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

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

    Hot Tools

    VSCode Windows 64-bit Download

    VSCode Windows 64-bit Download

    A free and powerful IDE editor launched by Microsoft

    SublimeText3 English version

    SublimeText3 English version

    Recommended: Win version, supports code prompts!

    MantisBT

    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

    Atom editor mac version download

    The most popular open source editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use