Negroni和Gorilla/mux 解析 Golang

如有错误欢迎纠正, 有缺漏欢迎补充

参考资料:
https://github.com/urfave/negroni/blob/master/translations/README_zh_CN.md
https://github.com/gorilla/mux
https://github.com/unrolled/render
https://github.com/pmlpml/golang-learning/tree/master/web

假设我们开发服务端时用如下代码:

package main

import (
    "service"
)

func main() {
    server := service.NewServer()
    server.Run(":8080")
}
package service

import (
    "net/http"
    "github.com/codegangsta/negroni"
    "github.com/gorilla/mux"
    "github.com/unrolled/render"
)

// NewServer configures and returns a Server.
func NewServer() *negroni.Negroni {
    // 返回一个Render实例的指针
    formatter := render.New(render.Options{
        IndentJSON: true, // 输出时的格式是方便阅读的JSON
    })

    n := negroni.Classic()
    mx := mux.NewRouter()

    initRoutes(mx, formatter)

    n.UseHandler(mx)
    return n
}

func initRoutes(mx *mux.Router, formatter *render.Render) {
    // 如果用户访问了地址 /hello/{id}, 那就对应调用该函数
    // 此处的函数为 testHandler 函数返回的 http.HandlerFunc
    mx.HandleFunc("/hello/{id}", testHandler(formatter)).Methods("GET")
}

func testHandler(formatter *render.Render) http.HandlerFunc {

    return func(w http.ResponseWriter, req *http.Request) {
        vars := mux.Vars(req)
        id := vars["id"]
        formatter.JSON(w, http.StatusOK, struct{ Test string }{
  "Hello " + id})
    }
}

negroni和gorilla/mux工作的流程图如下:

server := service.NewServer()

    // Classic 返回带有默认中间件的Negroni实例指针:
    n := negroni.Classic()
        // New 创建 negroni 实例并返回其指针
        return New(NewRecovery(), 
            NewLogger(), 
            NewStatic(http.Dir("public"))
        )
            return &Negron
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值