modulepackage
3.0.1+incompatible
Repository: https://github.com/skarm/echo.git
Documentation: pkg.go.dev
# README
[Echo v3] (https://echo.labstack.com)

Fast and unfancy HTTP server framework for Go (Golang).
Feature Overview
- Optimized HTTP router which smartly prioritize routes
- Build robust and scalable RESTful APIs
- Group APIs
- Extensible middleware framework
- Define middleware at root, group or route level
- Data binding for JSON, XML and form payload
- Handy functions to send variety of HTTP responses
- Centralized HTTP error handling
- Template rendering with any template engine
- Define your format for the logger
- Highly customizable
- Automatic TLS via Let’s Encrypt
- Built-in graceful shutdown
Performance
Quick Start
Installation
$ go get -u github.com/labstack/echo
Hello, World!
Create server.go
package main
import (
"net/http"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
if err := e.Start(":1323"); err != nil {
e.Logger.Fatal(err.Error())
}
}
Start server
$ go run server.go
Browse to http://localhost:1323 and you should see Hello, World! on the page.
Routing
e.POST("/users", saveUser)
e.GET("/users/:id", getUser)
e.PUT("/users/:id", updateUser)
e.DELETE("/users/:id", deleteUser)
Path Parameters
// e.GET("/users/:id", getUser)
func getUser(c echo.Context) error {
// User ID from path `users/:id`
id := c.Param("id")
return c.String(http.StatusOK, id)
}
Browse to http://localhost:1323/users/Joe and you should see 'Joe' on the page.
Query Parameters
/show?team=x-men&member=wolverine
//e.GET("/show", show)
func show(c echo.Context) error {
// Get team and member from the query string
team := c.QueryParam("team")
member := c.QueryParam("member")
return c.String(http.StatusOK, "team:" + team + ", member:" + member)
}
Browse to http://localhost:1323/show?team=x-men&member=wolverine and you should see 'team:x-men, member:wolverine' on the page.
Form application/x-www-form-urlencoded
POST
/save
name | value |
---|---|
name | Joe Smith |
[email protected] |
// e.POST("/save", save)
func save(c echo.Context) error {
// Get name and email
name := c.FormValue("name")
email := c.FormValue("email")
return c.String(http.StatusOK, "name:" + name + ", email:" + email)
}
Run the following command:
$ curl -F "name=Joe Smith" -F "[email protected]" http://localhost:1323/save
// => name:Joe Smith, email:[email protected]
Form multipart/form-data
POST
/save
name | value |
---|---|
name | Joe Smith |
avatar | avatar |
func save(c echo.Context) error {
// Get name
name := c.FormValue("name")
// Get avatar
avatar, err := c.FormFile("avatar")
if err != nil {
return err
}
// Source
src, err := avatar.Open()
if err != nil {
return err
}
defer src.Close()
// Destination
dst, err := os.Create(avatar.Filename)
if err != nil {
return err
}
defer dst.Close()
// Copy
if _, err = io.Copy(dst, src); err != nil {
return err
}
return c.HTML(http.StatusOK, "<b>Thank you! " + name + "</b>")
}
Run the following command.
$ curl -F "name=Joe Smith" -F "avatar=@/path/to/your/avatar.png" http://localhost:1323/save
// => <b>Thank you! Joe Smith</b>
For checking uploaded image, run the following command.
cd <project directory>
ls avatar.png
// => avatar.png
Handling Request
- Bind
JSON
orXML
orform
payload into Go struct based onContent-Type
request header. - Render response as
JSON
orXML
with status code.
type User struct {
Name string `json:"name" xml:"name" form:"name"`
Email string `json:"email" xml:"email" form:"email"`
}
e.POST("/users", func(c echo.Context) error {
u := new(User)
if err := c.Bind(u); err != nil {
return err
}
return c.JSON(http.StatusCreated, u)
// or
// return c.XML(http.StatusCreated, u)
})
Static Content
Server any file from static directory for path /static/*
.
e.Static("/static", "static")
Learn More
Template Rendering
Middleware
// Root level middleware
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// Group level middleware
g := e.Group("/admin")
g.Use(middleware.BasicAuth(func(username, password string) bool {
if username == "joe" && password == "secret" {
return true
}
return false
}))
// Route level middleware
track := func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
println("request to /users")
return next(c)
}
}
e.GET("/users", func(c echo.Context) error {
return c.String(http.StatusOK, "/users")
}, track)
Built-in Middleware
Middleware | Description |
---|---|
BodyLimit | Limit request body |
Logger | Log HTTP requests |
Recover | Recover from panics |
Gzip | Send gzip HTTP response |
BasicAuth | HTTP basic authentication |
JWTAuth | JWT authentication |
Secure | Protection against attacks |
CORS | Cross-Origin Resource Sharing |
CSRF | Cross-Site Request Forgery |
HTTPSRedirect | Redirect HTTP requests to HTTPS |
HTTPSWWWRedirect | Redirect HTTP requests to WWW HTTPS |
WWWRedirect | Redirect non WWW requests to WWW |
NonWWWRedirect | Redirect WWW requests to non WWW |
AddTrailingSlash | Add trailing slash to the request URI |
RemoveTrailingSlash | Remove trailing slash from the request URI |
MethodOverride | Override request method |
Learn More
Third-party Middleware
Middleware | Description |
---|---|
echoperm | Keeping track of users, login states and permissions. |
echopprof | Adapt net/http/pprof to labstack/echo. |
Next
Need help?
Support Us
- :star: the project
- Donate
- :earth_americas: spread the word
- Contribute to the project
Contribute
Use issues for everything
- Report issues
- Discuss on chat before sending a pull request
- Suggest new features or enhancements
- Improve/fix documentation
Credits
- Vishal Rana - Author
- Nitin Rana - Consultant
- Contributors
License
# Functions
New creates an instance of Echo.
NewHTTPError creates a new HTTPError instance.
NewResponse creates a new instance of Response.
NewRouter returns a new Router instance.
WrapHandler wraps `http.Handler` into `echo.HandlerFunc`.
WrapMiddleware wraps `func(http.Handler) http.Handler` into `echo.MiddlewareFunc`.
# Constants
HTTP methods.
HTTP methods.
HTTP methods.
HTTP methods.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Security.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
Headers.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
MIME types.
HTTP methods.
HTTP methods.
HTTP methods.
HTTP methods.
HTTP methods.
# Variables
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Errors.
Error handlers.
Error handlers.
# Type aliases
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author