转载

Echo - 一个 Go 实现的快速 HTTP 路由器和微型 Web 框架

Echo is a fast HTTP router (zero memory allocation) + micro web framework in Go.

Features

  • Zippy router.
  • Extensible middleware/handler, supports:
    • Middleware
      • func(*echo.Context)
      • func(echo.HandlerFunc) echo.HandlerFunc
      • func(http.Handler) http.Handler
      • http.Handler
      • http.HandlerFunc
      • func(http.ResponseWriter, *http.Request)
    • Handler
      • func(*echo.Context)
      • http.Handler
      • http.HandlerFunc
      • func(http.ResponseWriter, *http.Request)
  • Handy encoding/decoding functions.
  • Serve static files, including index.

Installation

go get github.com/labstack/echo

labstack/echo/example

package main import (  "net/http"  "github.com/labstack/echo"  mw "github.com/labstack/echo/middleware"  "github.com/rs/cors"  "github.com/thoas/stats" ) type user struct {  ID   string `json:"id"`  Name string `json:"name"` } var users map[string]user func init() {  users = map[string]user{   "1": user{    ID:   "1",    Name: "Wreck-It Ralph",   },  } } func createUser(c *echo.Context) {  u := new(user)  if c.Bind(u) {   users[u.ID] = *u   c.JSON(http.StatusCreated, u)  } } func getUsers(c *echo.Context) {  c.JSON(http.StatusOK, users) } func getUser(c *echo.Context) {  c.JSON(http.StatusOK, users[c.P(0)]) } func main() {  e := echo.New()  //*************************//  //   Built-in middleware   //  //*************************//  e.Use(mw.Logger)  //****************************//  //   Third-party middleware   //  //****************************//  // https://github.com/rs/cors  e.Use(cors.Default().Handler)  // https://github.com/thoas/stats  s := stats.New()  e.Use(s.Handler)  // Route  e.Get("/stats", func(c *echo.Context) {   c.JSON(200, s.Data())  })  // Serve index file  e.Index("public/index.html")  // Serve static files  e.Static("/js", "public/js")  //************//  //   Routes   //  //************//  e.Post("/users", createUser)  e.Get("/users", getUsers)  e.Get("/users/:id", getUser)  // Start server  e.Run(":8080") } 

Benchmark

Based on julienschmidt/go-http-routing-benchmark , March 25, 2015

GitHub API

BenchmarkAce_GithubAll          20000        70318 ns/op       13792 B/op        167 allocs/op BenchmarkBear_GithubAll         10000       262758 ns/op       79952 B/op        943 allocs/op BenchmarkBeego_GithubAll         3000       504264 ns/op      146272 B/op       2092 allocs/op BenchmarkEcho_GithubAll         30000        45349 ns/op           0 B/op          0 allocs/op BenchmarkBone_GithubAll          1000      2058931 ns/op      648016 B/op       8119 allocs/op BenchmarkDenco_GithubAll        20000        79656 ns/op       20224 B/op        167 allocs/op BenchmarkGin_GithubAll          20000        71009 ns/op       13792 B/op        167 allocs/op BenchmarkGocraftWeb_GithubAll    5000       384342 ns/op      133280 B/op       1889 allocs/op BenchmarkGoji_GithubAll          3000       565323 ns/op       56113 B/op        334 allocs/op BenchmarkGoJsonRest_GithubAll    5000       461591 ns/op      135995 B/op       2940 allocs/op BenchmarkGoRestful_GithubAll      200      8828847 ns/op      649139 B/op       7355 allocs/op BenchmarkGorillaMux_GithubAll     200      6794821 ns/op      153137 B/op       1791 allocs/op BenchmarkHttpRouter_GithubAll   30000        51688 ns/op       13792 B/op        167 allocs/op BenchmarkHttpTreeMux_GithubAll  10000       136677 ns/op       56112 B/op        334 allocs/op BenchmarkKocha_GithubAll        10000       145115 ns/op       23304 B/op        843 allocs/op BenchmarkMacaron_GithubAll       2000       684714 ns/op      224960 B/op       2315 allocs/op BenchmarkMartini_GithubAll        100     10501805 ns/op      237953 B/op       2686 allocs/op BenchmarkPat_GithubAll            500      3987941 ns/op     1504101 B/op      32222 allocs/op BenchmarkRevel_GithubAll         2000      1127175 ns/op      345553 B/op       5918 allocs/op BenchmarkRivet_GithubAll        10000       239793 ns/op       84272 B/op       1079 allocs/op BenchmarkTango_GithubAll          500      3452359 ns/op     1338664 B/op      27736 allocs/op BenchmarkTigerTonic_GithubAll    2000       951609 ns/op      241088 B/op       6052 allocs/op BenchmarkTraffic_GithubAll        200      7496057 ns/op     2664761 B/op      22390 allocs/op BenchmarkVulcan_GithubAll        5000       300807 ns/op       19894 B/op        609 allocs/op BenchmarkZeus_GithubAll          2000       801269 ns/op      300688 B/op       2648 allocs/op 
正文到此结束
Loading...