Echo - 微型 Web 框架


MIT
跨平台
Google Go

软件简介

Echo 是一个用 Go 语言开发的快速 HTTP 路由器(零内存分配)和微型 Web 框架。

性能比较:

特性:

  • Zippy router.

  • Extensible middleware/handler, supports:

    • func(*echo.Context)

    • http.Handler

    • http.HandlerFunc

    • func(http.ResponseWriter, *http.Request)

    • func(*echo.Context)

    • func(echo.HandlerFunc) echo.HandlerFunc

    • func(http.Handler) http.Handler

    • http.Handler

    • http.HandlerFunc

    • func(http.ResponseWriter, *http.Request)

    • Middleware

    • Handler

  • Handy encoding/decoding functions.

  • 支持静态文件处理

示例代码:

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")
}