新手问题 关于negroni框架的一些疑惑

toyijiu · 2017年03月16日 · 最后由 傅小黑 回复于 2017年03月17日 · 436 次阅读

初学 go,最近两天在看 negroni 的框架代码,现在看了个大概,有些地方不是很明白,有几个疑惑想请教下

  • 自定义的路由表用了 middleware 这个链表和 handler 的一个 slice。用两个的目的是什么呢,用一个的话我理解也可以吧.我第一眼看到这个脑袋里冒出来的是 Mark-Sweep 算法。。。
  • 注释说 handlers 是 can be,middleware 是 已评估的。这两个是什么意思呢,我看初始化的时候都是直接把注册的*ServeMux 搞进去 go // Negroni is a stack of Middleware Handlers that can be invoked as an http.Handler. // Negroni middleware is evaluated in the order that they are added to the stack using // the Use and UseHandler methods. type Negroni struct { middleware middleware handlers []Handler }
// UseHandler adds a http.Handler onto the middleware stack. Handlers are invoked in the order they are added to a Negroni.
func (n *Negroni) UseHandler(handler http.Handler) {
    n.Use(Wrap(handler))
}
// Use adds a Handler onto the middleware stack. Handlers are invoked in the order they are added to a Negroni.
func (n *Negroni) Use(handler Handler) {
    if handler == nil {
        panic("handler cannot be nil")
    }

    n.handlers = append(n.handlers, handler)
    n.middleware = build(n.handlers)
}
func build(handlers []Handler) middleware {
    var next middleware

    if len(handlers) == 0 {
        return voidMiddleware()
    } else if len(handlers) > 1 {
        next = build(handlers[1:])
    } else {
        next = voidMiddleware()
    }

    return middleware{handlers[0], &next}
}
更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

middleware{handlers[0],&next} 意思就是这个是链表,是根据 handlers slice 拼成的

// Negroni is a stack of Middleware Handlers that can be invoked as an http.Handler. Negroni 是 Middleware Handlers 的栈,Handlers 可以 作为 http.Handler 被调用

// Negroni middleware is evaluated in the order that they are added to the stack using Negroni middleware 被处理为按照添加到栈的顺序的 middleware 链表来用

只是用一个 handlers 记录 stack,每次添加的时候用 handlers 来生成 middleware 链表

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册