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?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?