echo

package module
Version: v1.2.0 Latest Latest
Warning

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

README

Echo GoDoc License Build Status Coverage Status

A fast and unfancy micro web framework for Go.

Features

  • 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.

Performance

Based on [vishr/go-http-routing-benchmark] (https://github.com/vishr/go-http-routing-benchmark), June 5, 2015.

GitHub API

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

Performance

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

Installation

$ go get github.com/labstack/echo

Recipes

Guide

Echo System

Community created packages for Echo

Contribute

Use issues for everything

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

Credits

Documentation

Index

Constants

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

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

Variables

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

Functions

This section is empty.

Types

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
t or T : Toggle theme light dark auto
y or Y : Canonical URL