我正在使用httprouter
API,并且正在尝试找出如何处理404。它确实在文档中说404可以手动处理,但是我真的不知道如何编写自己的
自定义处理程序 。
在其他路线之后,我尝试了以下方法…
router.NotFound(pageNotFound)
但是我得到了错误not enough arguments in call to router.NotFound
。
如果有人能指出我正确的方向,那就太好了。
类型httprouter.Router
是struct
具有字段的:
NotFound http.Handler
因此,类型为,NotFound
是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
包调用。如果要从其他处理程序之一手动调用它,则必须将a
ResponseWriter
和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 是一个 Go 语言开发的轻量级高性能 HTTP 请求路由,也可以叫多路复用。 示例代码: package mainimport ( "fmt" "github.com/julienschmidt/httprouter" "net/http" "log")func Index(w http.ResponseWriter, r *http.Request,
问题内容: 我正在GoLang中为一个简单的REST服务编写测试。但是,因为我使用julienschmidt / httprouter 作为路由库。我正在努力编写测试。 main.go 控制器 我的问题是:当GetBook既不是HttpHandler也不是HttpHandle时如何测试呢? 如果我使用传统的处理程序,这样的测试将很容易 问题是,httprouter不是处理程序,也不是handlef
丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能。在本章我们就会重点介绍几个插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!
Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写)。 在此之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入 期处理不同类型的数据,这全是因为有了 codec 设置。 所以,这里需要纠正之前的一个概念。Logstash 不只是一个input | filter | outpu