为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go 自定义 404 错误消息

使用 Go 自定义 404 错误消息

Go
12345678_0001 2021-09-10 20:47:02
我有这个代码,如果我去 /time/ 会给出我的自定义 404 错误消息,但如果我去 /times/ 或只是 / 或 /whatever 然后我会得到默认的 404 错误消息。我想为除 /time/ 以外的所有情况显示我的自定义 404package mainimport (        "fmt"        "time"        "flag"        "os"        "net/http"        )const AppVersion = "timeserver version: 3.0"func timeserver(w http.ResponseWriter, r *http.Request) {    if r.URL.Path != "/time/" {        NotFoundHandler(w, r)        return    }    const layout = "3:04:05 PM"    t := time.Now().Local()    fmt.Fprint(w, "<html>\n")    fmt.Fprint(w, "<head>\n")    fmt.Fprint(w, "<style>\n")    fmt.Fprint(w, "p {font-size: xx-large}\n")    fmt.Fprint(w, "span.time {color: red}\n")    fmt.Fprint(w, "</style>\n")    fmt.Fprint(w, "</head>\n")    fmt.Fprint(w, "<body>\n")    //fmt.Fprint(w, "The time is now " + t.Format(layout))    fmt.Fprint(w, "<p>The time is now <span class=\"time\">" + t.Format(layout) + "</span>.</p>\n")    fmt.Fprint(w, "</body>\n")    fmt.Fprint(w, "</html>\n")}func NotFoundHandler(w http.ResponseWriter, r *http.Request) {    fmt.Fprint(w, "custom 404")}func main() {    version := flag.Bool("V", false, "prints current version")    port := flag.String("port", "8080", "sets service port number")    flag.Parse()    if *version {      fmt.Println(AppVersion)      os.Exit(0)    }    http.HandleFunc("/time/", timeserver)    http.ListenAndServe("localhost:" + *port, nil)}
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

将此行添加到主:


http.HandleFunc("/", NotFoundHandler)

"/" 的处理程序是 catchall 处理程序。


此外,您应该修改处理程序以返回 404 状态:


func NotFoundHandler(w http.ResponseWriter, r *http.Request) {

   w.WriteHeader(http.StatusNotFound)

   fmt.Fprint(w, "custom 404")

}


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信