登录
首页 >  Golang >  Go问答

httprouter 配置 NotFound

来源:Golang技术栈

时间:2023-04-10 20:58:29 181浏览 收藏

从现在开始,努力学习吧!本文《httprouter 配置 NotFound》主要讲解了golang等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我正在使用httprouterAPI,并且正在尝试解决如何处理 404。它确实在文档中说可以手动处理 404,但我真的不知道如何编写自己的 自定义处理程序

在我的其他路线之后,我尝试了以下...

router.NotFound(pageNotFound)

但我得到了错误not enough arguments in call to router.NotFound

如果有人能指出我正确的方向,那就太好了。

正确答案

类型httprouter.Router是 astruct有一个字段:

NotFound http.Handler

所以 type of NotFoundis http.Handler,一个只有一个方法的接口类型:

ServeHTTP(ResponseWriter, *Request)

如果您想要自己的自定义“未找到”处理程序,则必须设置一个实现此接口的值。

最简单的方法是定义一个带有签名的函数:

func(http.ResponseWriter, *http.Request)

并使用http.HandlerFunc()辅助函数将其“转换”为实现http.Handler接口的值,其ServeHTTP()方法只需调用具有上述签名的函数。

例如:

func MyNotFound(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/plain; charset=utf-8")
    w.WriteHeader(http.StatusNotFound) // StatusNotFound = 404
    w.Write([]byte("My own Not Found handler."))
    w.Write([]byte(" The page you requested could not be found."))
}

var router *httprouter.Router = ... // Your router value
router.NotFound = http.HandlerFunc(MyNotFound)

NotFound处理程序将由httprouter包调用。如果您想从其他处理程序之一手动调用它,则必须将 aResponseWriter和 a传递*Request给它,如下所示:

func ResourceHandler(w http.ResponseWriter, r *http.Request) {
    exists := ... // Find out if requested resource is valid and available
    if !exists {
        MyNotFound(w, r) // Pass ResponseWriter and Request
        // Or via the Router:
        // router.NotFound(w, r)
        return
    }

    // Resource exists, serve it
    // ...
}

以上就是《httprouter 配置 NotFound》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表