zen

zen is a elegant and lightweight web framework for Go

Github星跟踪图

zen is a lightweight go framework for web development CircleCI

Coverage Status
Go Report Card
golang
GoDoc
license

zen is a web framework written by go, you will love it if you preffer high performance and lightweight!!!

Features

  • High performance HTTP router
  • Restful API
  • Parameters in path
  • Group APIs
  • Structure log support
  • Form validate and struct bind
  • JSON and XML data bind
  • Built in panic handler
  • Middleware at root or group level
  • Handy response functions
  • Context support
  • Graceful shutdown

Installation

go get github.com/philchia/zen

Examples

Start a server

func main() {
    server := zen.New()

    if err := server.Run(":8080"); err != nil {
        log.Println(err)
    }
}

Using GET, POST, PUT, PATCH, DELETE

    server := zen.New()
    server.Get("/test",handler)
    server.Post("/test", handler)
    server.Put("/test",handler)
    server.Patch("/test", handler)
    server.Delete("/test",handler)

Group route

    server := zen.New()

    user := server.Group("/user")
    {
        user.Get("/test",handler)
        user.Post("/test", handler)
        user.Put("/test",handler)
        user.Patch("/test", handler)
        user.Delete("/test",handler)
    }

Add a middleware

    server := zen.New()
    server.AddInterceptor(func(h HandlerFunc) HandlerFunc {
        return func(ctx zen.Context) {
            ctx.SetField("REQID",1)
            ctx.LogInfo("Root Middleware")
            h(ctx)
        }
    })

Group layer middleware

    server := zen.New()

    user := server.Group("/user")
    {
        user.AddInterceptor(func(h HandlerFunc) HandlerFunc {
        return func(ctx zen.Context) {
            ctx.LogInfo("Group Middleware")
            h(ctx)
        }
    })
    }

Parameters in path

    server := zen.New()
    server.Get("/user/:uid",func (ctx zen.Context) {
        ctx.JSON(map[string]string{"uid": ctx.Param("uid")})
    })
    if err := server.Run(":8080"); err != nil {
    log.Println(err)
    }

Parse and validate input

func handler(ctx zen.Context) {
    var input struct {
        Name string `form:"name" json:"name"`
        Age  int    `form:"age" json:"age"`
        Mail string `form:"mail" valid:"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" msg:"Illegal email" json:"mail"`
    }

    if err := ctx.ParseValidForm(&input); err != nil {
        ctx.JSON(map[string]string{"err": err.Error()})
        return
    }
    log.Println(input)
    ctx.JSON(input)
}

Handle 404

    server := zen.New()
    server.HandleNotFound(func(ctx zen.Context) {
        ctx.WriteStatus(StatusNotFound)
        ctx.WriteString(StatusText(StatusNotFound))
    })
    if err := server.Run(":8080"); err != nil {
    log.Println(err)
    }

Context support

    server := zen.New()
    server.HandleNotFound(func(ctx zen.Context) {
        ctx, cancel := ctx.WithDeadline(time.Now().Add(time.Second) * 3)
        defer cancel()
        db, _ := sql.Open("mysql", "dsn")
        db.QueryContext(ctx, "SELECT * FROM table;")
    })
    if err := server.Run(":8080"); err != nil {
    log.Println(err)
    }

Standard http.HandleFunc support

    server := zen.New()
    server.Get("/user/:uid",zen.WrapF(func(rw http.ResponseWriter, req *http.Request) {

    }))
    if err := server.Run(":8080"); err != nil {
    log.Println(err)
    }

Graceful shutdown

    server := zen.New()
    server.ShutdownDuration = time.Second * 10
    server.Shutdown()

Force close

    server := zen.New()
    server.Close()

License

zen is published under MIT license

主要指标

概览
名称与所有者philchia/zen
主编程语言Go
编程语言Go, Shell (语言数: 2)
平台
许可证MIT License
所有者活动
创建于2017-02-21 06:54:03
推送于2018-01-13 08:03:37
最后一次提交2018-01-13 16:03:28
发布数4
最新版本名称2.0.1 (发布于 2017-09-29 22:27:57)
第一版名称1.1 (发布于 2017-07-15 17:10:04)
用户参与
星数258
关注者数5
派生数18
提交数181
已启用问题?
问题数1
打开的问题数0
拉请求数3
打开的拉请求数0
关闭的拉请求数0
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?