Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
httprouter配置未找到_Http_Go_Url Routing - Fatal编程技术网

httprouter配置未找到

httprouter配置未找到,http,go,url-routing,Http,Go,Url Routing,我正在使用一个API,我正在尝试解决如何处理404。它确实说404可以手动处理,但我真的不知道如何编写自己的自定义处理程序 在我的其他路线之后,我尝试了以下方法 router.NotFound(pageNotFound) 但是我在调用router.NotFound时遇到错误参数不足 如果有人能给我指出正确的方向,那就太好了。类型是一个结构,它有一个字段: NotFound http.Handler 因此,NotFound的类型是一种接口类型,它有一个方法: ServeHTTP(Respons

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

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

router.NotFound(pageNotFound)
但是我在调用router.NotFound时遇到错误
参数不足

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

类型是一个
结构,它有一个字段:

NotFound http.Handler
因此,
NotFound
的类型是一种接口类型,它有一个方法:

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

最简单的方法是使用签名定义函数:

func(http.ResponseWriter, *http.Request)
并使用helper函数将其“转换”为实现
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
处理程序将由
httproter
包调用。如果您想从其他处理程序中手动调用它,则必须向其传递a和a,如下所示:

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
    // ...
}

NotFound是http.HandlerFunc类型的函数指针。您必须将签名为
Func(w ResponseWriter,r*Request)
的函数放到某个地方,并将其分配给NotFound(
router.NotFound=Func
)。

@miestasmia感谢您的提示,我相应地更新了答案。