package module
v1.2.0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Oct 11, 2015 License: MIT Imports: 20 Imported by: 0


Echo GoDoc License Build Status Coverage Status

A fast and unfancy micro web framework for Go.


  • Fast HTTP router which smartly prioritize routes.
  • Extensible middleware, supports:
    • echo.MiddlewareFunc
    • func(echo.HandlerFunc) echo.HandlerFunc
    • echo.HandlerFunc
    • func(*echo.Context) error
    • func(http.Handler) http.Handler
    • http.Handler
    • http.HandlerFunc
    • func(http.ResponseWriter, *http.Request)
  • Extensible handler, supports:
    • echo.HandlerFunc
    • func(*echo.Context) error
    • http.Handler
    • http.HandlerFunc
    • func(http.ResponseWriter, *http.Request)
  • Sub-router/Groups
  • Handy functions to send variety of HTTP response:
    • HTML
    • HTML via templates
    • String
    • JSON
    • JSONP
    • XML
    • File
    • NoContent
    • Redirect
    • Error
  • Build-in support for:
    • Favicon
    • Index file
    • Static files
    • WebSocket
  • Centralized HTTP error handling.
  • Customizable HTTP request binding function.
  • Customizable HTTP response rendering function, allowing you to use any HTML template engine.


Based on [vishr/go-http-routing-benchmark] (, June 5, 2015.

Echo: 38662 ns/op, 0 B/op, 0 allocs/op


BenchmarkAce_GithubAll              20000             93675 ns/op           13792 B/op      167 allocs/op
BenchmarkBear_GithubAll             10000            264194 ns/op           79952 B/op      943 allocs/op
BenchmarkBeego_GithubAll             2000           1109160 ns/op          146272 B/op      2092 allocs/op
BenchmarkBone_GithubAll              1000           2063973 ns/op          648016 B/op     8119 allocs/op
BenchmarkDenco_GithubAll            20000             83114 ns/op           20224 B/op       167 allocs/op
BenchmarkEcho_GithubAll             30000             38662 ns/op               0 B/op        0 allocs/op
BenchmarkGin_GithubAll              30000             43467 ns/op               0 B/op        0 allocs/op
BenchmarkGocraftWeb_GithubAll        5000            386829 ns/op          133280 B/op      1889 allocs/op
BenchmarkGoji_GithubAll              3000            561131 ns/op           56113 B/op      334 allocs/op
BenchmarkGoJsonRest_GithubAll        3000            490789 ns/op          135995 B/op      2940 allocs/op
BenchmarkGoRestful_GithubAll          100          15569513 ns/op          797239 B/op      7725 allocs/op
BenchmarkGorillaMux_GithubAll         200           7431130 ns/op          153137 B/op      1791 allocs/op
BenchmarkHttpRouter_GithubAll       30000             51192 ns/op           13792 B/op       167 allocs/op
BenchmarkHttpTreeMux_GithubAll      10000            138164 ns/op           56112 B/op       334 allocs/op
BenchmarkKocha_GithubAll            10000            139625 ns/op           23304 B/op       843 allocs/op
BenchmarkMacaron_GithubAll           2000            709932 ns/op          224960 B/op      2315 allocs/op
BenchmarkMartini_GithubAll            100          10261331 ns/op          237953 B/op      2686 allocs/op
BenchmarkPat_GithubAll                500           3989686 ns/op         1504104 B/op    32222 allocs/op
BenchmarkPossum_GithubAll            5000            259165 ns/op           97441 B/op       812 allocs/op
BenchmarkR2router_GithubAll         10000            240345 ns/op           77328 B/op      1182 allocs/op
BenchmarkRevel_GithubAll             2000           1203336 ns/op          345554 B/op      5918 allocs/op
BenchmarkRivet_GithubAll            10000            247213 ns/op           84272 B/op      1079 allocs/op
BenchmarkTango_GithubAll             5000            379960 ns/op           87081 B/op      2470 allocs/op
BenchmarkTigerTonic_GithubAll        2000            931401 ns/op          241089 B/op      6052 allocs/op
BenchmarkTraffic_GithubAll            200           7292170 ns/op         2664770 B/op     22390 allocs/op
BenchmarkVulcan_GithubAll            5000            271682 ns/op           19894 B/op       609 allocs/op
BenchmarkZeus_GithubAll              2000            748827 ns/op          300688 B/op     2648 allocs/op


$ go get



Echo System

Community created packages for Echo


Use issues for everything

  • Report problems
  • Discuss before sending pull request
  • Suggest new features
  • Improve/fix documentation





View Source
const (
	// CONNECT HTTP method
	// DELETE HTTP method
	// GET HTTP method
	GET = "GET"
	// HEAD HTTP method
	// OPTIONS HTTP method
	// PATCH HTTP method
	// POST HTTP method
	// PUT HTTP method
	PUT = "PUT"
	// TRACE HTTP method

	ApplicationJSON                  = "application/json"
	ApplicationJSONCharsetUTF8       = ApplicationJSON + "; " + CharsetUTF8
	ApplicationJavaScript            = "application/javascript"
	ApplicationJavaScriptCharsetUTF8 = ApplicationJavaScript + "; " + CharsetUTF8
	ApplicationXML                   = "application/xml"
	ApplicationXMLCharsetUTF8        = ApplicationXML + "; " + CharsetUTF8
	ApplicationForm                  = "application/x-www-form-urlencoded"
	ApplicationProtobuf              = "application/protobuf"
	ApplicationMsgpack               = "application/msgpack"
	TextHTML                         = "text/html"
	TextHTMLCharsetUTF8              = TextHTML + "; " + CharsetUTF8
	TextPlain                        = "text/plain"
	TextPlainCharsetUTF8             = TextPlain + "; " + CharsetUTF8
	MultipartForm                    = "multipart/form-data"

	CharsetUTF8 = "charset=utf-8"

	AcceptEncoding     = "Accept-Encoding"
	Authorization      = "Authorization"
	ContentDisposition = "Content-Disposition"
	ContentEncoding    = "Content-Encoding"
	ContentLength      = "Content-Length"
	ContentType        = "Content-Type"
	Location           = "Location"
	Upgrade            = "Upgrade"
	Vary               = "Vary"
	WWWAuthenticate    = "WWW-Authenticate"
	XForwardedFor      = "X-Forwarded-For"
	XRealIP            = "X-Real-IP"

	WebSocket = "websocket"


View Source
var (
	UnsupportedMediaType  = errors.New("echo ⇒ unsupported media type")
	RendererNotRegistered = errors.New("echo ⇒ renderer not registered")
	InvalidRedirectCode   = errors.New("echo ⇒ invalid redirect status code")


This section is empty.


type Binder added in v1.2.0

type Binder interface {
	Bind(*http.Request, interface{}) error

Binder is the interface that wraps the Bind method.

type Context

type Context struct {
	// contains filtered or unexported fields

Context represents context for the current request. It holds request and response objects, path parameters, data and registered handler.

func NewContext added in v0.0.13

func NewContext(req *http.Request, res *Response, e *Echo) *Context

NewContext creates a Context object.

func (*Context) Bind

func (c *Context) Bind(i interface{}) error

Bind binds the request body into specified type `i`. The default binder does it based on Content-Type header.

func (*Context) Error added in v0.0.10

func (c *Context) Error(err error)

Error invokes the registered HTTP error handler. Generally used by middleware.

func (*Context) File added in v1.2.0

func (c *Context) File(name, path string, attachment bool) (err error)

File sends a response with the content of the file. If `attachment` is set to true, the client is prompted to save the file with provided `name`, name can be empty, in that case name of the file is used.

func (*Context) Form added in v1.1.0

func (c *Context) Form(name string) string

Form returns form parameter by name.

func (*Context) Get

func (c *Context) Get(key string) interface{}

Get retrieves data from the context.

func (*Context) HTML added in v0.0.5

func (c *Context) HTML(code int, format string, a ...interface{}) (err error)

HTML formats according to a format specifier and sends HTML response with status code.

func (*Context) JSON

func (c *Context) JSON(code int, i interface{}) (err error)

JSON sends a JSON response with status code.

func (*Context) JSONP added in v1.2.0

func (c *Context) JSONP(code int, callback string, i interface{}) (err error)

JSONP sends a JSONP response with status code. It uses `callback` to construct the JSONP payload.

func (*Context) NoContent added in v0.0.10

func (c *Context) NoContent(code int) error

NoContent sends a response with no body and a status code.

func (*Context) P

func (c *Context) P(i int) (value string)

P returns path parameter by index.

func (*Context) Param

func (c *Context) Param(name string) (value string)

Param returns path parameter by name.

func (*Context) Query added in v1.1.0

func (c *Context) Query(name string) string

Query returns query parameter by name.

func (*Context) Redirect

func (c *Context) Redirect(code int, url string) error

Redirect redirects the request using http.Redirect with status code.

func (*Context) Render added in v0.0.5

func (c *Context) Render(code int, name string, data interface{}) (err error)

Render renders a template with data and sends a text/html response with status code. Templates can be registered using `Echo.SetRenderer()`.

func (*Context) Request

func (c *Context) Request() *http.Request

Request returns *http.Request.

func (*Context) Response

func (c *Context) Response() *Response

Response returns *Response.

func (*Context) Set

func (c *Context) Set(key string, val interface{})

Set saves data in the context.

func (*Context) Socket added in v0.0.14

func (c *Context) Socket() *websocket.Conn

Socket returns *websocket.Conn.

func (*Context) String

func (c *Context) String(code int, format string, a ...interface{}) (err error)

String formats according to a format specifier and sends text response with status code.

func (*Context) XML added in v1.1.0

func (c *Context) XML(code int, i interface{}) (err error)

XML sends an XML response with status code.

type Echo

type Echo struct {
	// contains filtered or unexported fields

func New

func New() (e *Echo)

New creates an instance of Echo.

func (*Echo) Any added in v1.2.0

func (e *Echo) Any(path string, h Handler)

Any adds a route > handler to the router for all HTTP methods.

func (*Echo) Connect

func (e *Echo) Connect(path string, h Handler)

Connect adds a CONNECT route > handler to the router.

func (*Echo) Debug added in v0.0.13

func (e *Echo) Debug() bool

Debug returns debug mode (enabled or disabled).

func (*Echo) DefaultHTTPErrorHandler added in v1.0.0

func (e *Echo) DefaultHTTPErrorHandler(err error, c *Context)

DefaultHTTPErrorHandler invokes the default HTTP error handler.

func (*Echo) Delete

func (e *Echo) Delete(path string, h Handler)

Delete adds a DELETE route > handler to the router.

func (*Echo) DisableColoredLog added in v1.2.0

func (e *Echo) DisableColoredLog()

DisableColoredLog disables colored log.

func (*Echo) Favicon added in v0.0.13

func (e *Echo) Favicon(file string)

Favicon serves the default favicon - GET /favicon.ico.

func (*Echo) Get

func (e *Echo) Get(path string, h Handler)

Get adds a GET route > handler to the router.

func (*Echo) Group added in v0.0.4

func (e *Echo) Group(prefix string, m ...Middleware) *Group

Group creates a new sub router with prefix. It inherits all properties from the parent. Passing middleware overrides parent middleware.

func (*Echo) HTTP2 added in v0.0.15

func (e *Echo) HTTP2()

HTTP2 enables HTTP2 support.

func (*Echo) Head

func (e *Echo) Head(path string, h Handler)

Head adds a HEAD route > handler to the router.

func (*Echo) Index

func (e *Echo) Index(file string)

Index serves index file.

func (*Echo) Match added in v1.2.0

func (e *Echo) Match(methods []string, path string, h Handler)

Match adds a route > handler to the router for multiple HTTP methods provided.

func (*Echo) Options

func (e *Echo) Options(path string, h Handler)

Options adds an OPTIONS route > handler to the router.

func (*Echo) Patch

func (e *Echo) Patch(path string, h Handler)

Patch adds a PATCH route > handler to the router.

func (*Echo) Post

func (e *Echo) Post(path string, h Handler)

Post adds a POST route > handler to the router.

func (*Echo) Put

func (e *Echo) Put(path string, h Handler)

Put adds a PUT route > handler to the router.

func (*Echo) Router

func (e *Echo) Router() *Router

Router returns router.

func (*Echo) Routes added in v1.0.0

func (e *Echo) Routes() []Route

Routes returns the registered routes.

func (*Echo) Run

func (e *Echo) Run(addr string)

Run runs a server.

func (*Echo) RunServer added in v0.0.5

func (e *Echo) RunServer(s *http.Server)

RunServer runs a custom server.

func (*Echo) RunTLS added in v0.0.5

func (e *Echo) RunTLS(addr, certFile, keyFile string)

RunTLS runs a server with TLS configuration.

func (*Echo) RunTLSServer added in v0.0.5

func (e *Echo) RunTLSServer(s *http.Server, certFile, keyFile string)

RunTLSServer runs a custom server with TLS configuration.

func (*Echo) ServeDir added in v1.0.0

func (e *Echo) ServeDir(path, dir string)

ServeDir serves files from a directory.

func (*Echo) ServeFile

func (e *Echo) ServeFile(path, file string)

ServeFile serves a file.

func (*Echo) ServeHTTP

func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP implements `http.Handler` interface, which serves HTTP requests.

func (*Echo) Server added in v1.1.0

func (e *Echo) Server(addr string) *http.Server

Server returns the internal *http.Server.

func (*Echo) SetBinder added in v0.0.14

func (e *Echo) SetBinder(b Binder)

SetBinder registers a custom binder. It's invoked by Context.Bind().

func (*Echo) SetDebug added in v0.0.14

func (e *Echo) SetDebug(on bool)

SetDebug enables/disables debug mode.

func (*Echo) SetHTTPErrorHandler added in v0.0.14

func (e *Echo) SetHTTPErrorHandler(h HTTPErrorHandler)

SetHTTPErrorHandler registers a custom Echo.HTTPErrorHandler.

func (*Echo) SetRenderer added in v0.0.14

func (e *Echo) SetRenderer(r Renderer)

SetRenderer registers an HTML template renderer. It's invoked by Context.Render().

func (*Echo) Static

func (e *Echo) Static(path, dir string)

Static serves static files from a directory. It's an alias for `Echo.ServeDir`

func (*Echo) StripTrailingSlash added in v1.2.0

func (e *Echo) StripTrailingSlash()

StripTrailingSlash enables removing trailing slash from the request path.

func (*Echo) Trace

func (e *Echo) Trace(path string, h Handler)

Trace adds a TRACE route > handler to the router.

func (*Echo) URI added in v0.0.11

func (e *Echo) URI(h Handler, params ...interface{}) string

URI generates a URI from handler.

func (*Echo) URL added in v0.0.11

func (e *Echo) URL(h Handler, params ...interface{}) string

URL is an alias for `URI` function.

func (*Echo) Use

func (e *Echo) Use(m ...Middleware)

Use adds handler to the middleware chain.

func (*Echo) WebSocket added in v0.0.14

func (e *Echo) WebSocket(path string, h HandlerFunc)

WebSocket adds a WebSocket route > handler to the router.

type Group added in v0.0.16

type Group struct {
	// contains filtered or unexported fields

func (*Group) Connect added in v0.0.16

func (g *Group) Connect(path string, h Handler)

func (*Group) Delete added in v0.0.16

func (g *Group) Delete(path string, h Handler)

func (*Group) Get added in v0.0.16

func (g *Group) Get(path string, h Handler)

func (*Group) Group added in v0.0.16

func (g *Group) Group(prefix string, m ...Middleware) *Group

func (*Group) Head added in v0.0.16

func (g *Group) Head(path string, h Handler)

func (*Group) Options added in v0.0.16

func (g *Group) Options(path string, h Handler)

func (*Group) Patch added in v0.0.16

func (g *Group) Patch(path string, h Handler)

func (*Group) Post added in v0.0.16

func (g *Group) Post(path string, h Handler)

func (*Group) Put added in v0.0.16

func (g *Group) Put(path string, h Handler)

func (*Group) ServeDir added in v1.0.0

func (g *Group) ServeDir(path, root string)

func (*Group) ServeFile added in v1.0.0

func (g *Group) ServeFile(path, file string)

func (*Group) Static added in v1.0.0

func (g *Group) Static(path, root string)

func (*Group) Trace added in v0.0.16

func (g *Group) Trace(path string, h Handler)

func (*Group) Use added in v0.0.16

func (g *Group) Use(m ...Middleware)

func (*Group) WebSocket added in v0.0.16

func (g *Group) WebSocket(path string, h HandlerFunc)

type HTTPError added in v0.0.12

type HTTPError struct {
	// contains filtered or unexported fields

func NewHTTPError added in v0.0.14

func NewHTTPError(code int, msg ...string) *HTTPError

func (*HTTPError) Code added in v0.0.12

func (e *HTTPError) Code() int

Code returns code.

func (*HTTPError) Error added in v0.0.12

func (e *HTTPError) Error() string

Error returns message.

func (*HTTPError) SetCode added in v1.0.0

func (e *HTTPError) SetCode(code int)

SetCode sets code.

type HTTPErrorHandler added in v0.0.10

type HTTPErrorHandler func(error, *Context)

HTTPErrorHandler is a centralized HTTP error handler.

type Handler

type Handler interface{}

type HandlerFunc

type HandlerFunc func(*Context) error

type Middleware

type Middleware interface{}

type MiddlewareFunc

type MiddlewareFunc func(HandlerFunc) HandlerFunc

type Renderer added in v0.0.7

type Renderer interface {
	Render(w io.Writer, name string, data interface{}) error

Renderer is the interface that wraps the Render method.

type Response added in v0.0.13

type Response struct {
	// contains filtered or unexported fields

func NewResponse added in v0.0.14

func NewResponse(w http.ResponseWriter) *Response

func (*Response) CloseNotify added in v0.0.13

func (r *Response) CloseNotify() <-chan bool

CloseNotify wraps response writer's CloseNotify function.

func (*Response) Committed added in v1.2.0

func (r *Response) Committed() bool

func (*Response) Flush added in v0.0.13

func (r *Response) Flush()

Flush wraps response writer's Flush function.

func (*Response) Header added in v0.0.13

func (r *Response) Header() http.Header

func (*Response) Hijack added in v0.0.13

func (r *Response) Hijack() (net.Conn, *bufio.ReadWriter, error)

Hijack wraps response writer's Hijack function.

func (*Response) SetWriter added in v0.0.15

func (r *Response) SetWriter(w http.ResponseWriter)

func (*Response) Size added in v0.0.13

func (r *Response) Size() int64

func (*Response) Status added in v0.0.13

func (r *Response) Status() int

func (*Response) Write added in v0.0.13

func (r *Response) Write(b []byte) (n int, err error)

func (*Response) WriteHeader added in v0.0.13

func (r *Response) WriteHeader(code int)

func (*Response) Writer added in v0.0.13

func (r *Response) Writer() http.ResponseWriter

type Route added in v1.0.0

type Route struct {
	Method  string
	Path    string
	Handler Handler

type Router added in v0.0.16

type Router struct {
	// contains filtered or unexported fields

func NewRouter

func NewRouter(e *Echo) *Router

func (*Router) Add added in v0.0.16

func (r *Router) Add(method, path string, h HandlerFunc, e *Echo)

func (*Router) Find added in v0.0.16

func (r *Router) Find(method, path string, ctx *Context) (h HandlerFunc, e *Echo)

func (*Router) ServeHTTP added in v0.0.16

func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request)

type Validator added in v1.2.0

type Validator interface {
	Validate() error

Validator is the interface that wraps the Validate method.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL