From a9c41b367c622debaba4a04701b836fbc23aedae Mon Sep 17 00:00:00 2001 From: Vishal Rana Date: Sat, 18 Apr 2015 17:02:02 -0700 Subject: [PATCH] Fixed example and updated readme. Signed-off-by: Vishal Rana --- README.md | 136 ++++++----------------------------------------- examples/main.go | 2 +- 2 files changed, 16 insertions(+), 122 deletions(-) diff --git a/README.md b/README.md index 3492f917..6a08a228 100644 --- a/README.md +++ b/README.md @@ -3,21 +3,25 @@ Echo is a fast HTTP router (zero memory allocation) and micro web framework in G ## Features -- Fast :rocket: router which smartly resolves conflicting routes +- Fast :rocket: router which smartly resolves conflicting routes. - Extensible middleware/handler, supports: - Middleware - `func(*echo.Context)` - - `func(echo.HandlerFunc) echo.HandlerFunc` + - `func(*echo.Context) error` + - `func(echo.HandlerFunc) echo.HandlerFunc error` - `func(http.Handler) http.Handler` - `http.Handler` - `http.HandlerFunc` - `func(http.ResponseWriter, *http.Request)` + - `func(http.ResponseWriter, *http.Request) error` - Handler - `func(*echo.Context)` + - `func(*echo.Context) error` - `http.Handler` - `http.HandlerFunc` - `func(http.ResponseWriter, *http.Request)` -- Group routing + - `func(http.ResponseWriter, *http.Request) error` +- Sub routing with groups. - Handy encoding/decoding functions. - Serve static files, including index. @@ -61,147 +65,37 @@ BenchmarkZeus_GithubAll 2000 752907 ns/op 300688 B/op 2648 all ```go get github.com/labstack/echo``` -## Example +## Examples -[labstack/echo/example](https://github.com/labstack/echo/tree/master/example) +[labstack/echo/example](https://github.com/labstack/echo/tree/master/examples) ```go package main import ( - "io" "net/http" - "html/template" - "github.com/labstack/echo" mw "github.com/labstack/echo/middleware" - "github.com/rs/cors" - "github.com/thoas/stats" ) -type ( - // Template provides HTML template rendering - Template struct { - templates *template.Template - } - - user struct { - ID string `json:"id"` - Name string `json:"name"` - } -) - -var ( - users map[string]user -) - -// Render HTML -func (t *Template) Render(w io.Writer, name string, data interface{}) error { - return t.templates.ExecuteTemplate(w, name, data) -} - -func welcome(c *echo.Context) { - c.Render("welcome", "Joe") -} - -func createUser(c *echo.Context) { - u := new(user) - if err := c.Bind(u); err == nil { - users[u.ID] = *u - if err := c.JSON(http.StatusCreated, u); err == nil { - // Do something! - } - return - } - http.Error(c.Response, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) -} - -func getUsers(c *echo.Context) { - c.JSON(http.StatusOK, users) -} - -func getUser(c *echo.Context) { - c.JSON(http.StatusOK, users[c.P(0)]) +// Handler +func hello(c *echo.Context) { + c.String(http.StatusOK, "Hello, World!\n") } func main() { e := echo.New() - //*************************// - // Built-in middleware // - //*************************// + // 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) - - //***************// - // Templates // - //***************// - t := &Template{ - // Cached templates - templates: template.Must(template.ParseFiles("public/tpl/welcome.tpl")), - } - e.Renderer(t) - e.Get("/welcome", welcome) - - //***********// - // Group // - //***********// - // Group with parent middleware - a := e.Group("/admin") - a.Use(func(c *echo.Context) { - // Security middleware - }) - a.Get("", func(c *echo.Context) { - c.String(http.StatusOK, "Welcome admin!") - }) - - // Group with no parent middleware - g := e.Group("/files", func(c *echo.Context) { - // Security middleware - }) - g.Get("", func(c *echo.Context) { - c.String(http.StatusOK, "Your files!") - }) + // Routes + e.Get("/", hello) // Start server e.Run(":8080") } - -func init() { - users = map[string]user{ - "1": user{ - ID: "1", - Name: "Wreck-It Ralph", - }, - } -} ``` ## License diff --git a/examples/main.go b/examples/main.go index d2094059..644413a0 100644 --- a/examples/main.go +++ b/examples/main.go @@ -34,7 +34,7 @@ func (t *Template) Render(w io.Writer, name string, data interface{}) error { } func welcome(c *echo.Context) { - c.Render("welcome", "Joe") + c.Render(http.StatusOK, "welcome", "Joe") } func createUser(c *echo.Context) {