5b36ce3612
* Fixes the concurrency issue of calling the `Next()` proxy target on round robin balancer - fixed concurrency issue in `AddTarget()` - moved `rand.New()` to the random balancer initializer func. - internal code reorganized eliminating unnecessary pointer redirection - employing `sync.Mutex` instead of `RWMutex` which brings additional overhead of tracking readers and writers. No need for that since the guarded code has no long-running operations, hence no realistic congestion. - added additional guards without which the code would otherwise panic (e.g., the case where a random value is calculation when targets list is empty) - added descriptions for func return values, what to expect in which case. - Improve code test coverage --------- Co-authored-by: Becir Basic <bb@neotel.at> |
||
---|---|---|
_fixture | ||
.github | ||
middleware | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
bind_test.go | ||
bind.go | ||
binder_external_test.go | ||
binder_test.go | ||
binder.go | ||
CHANGELOG.md | ||
codecov.yml | ||
context_fs_test.go | ||
context_fs.go | ||
context_test.go | ||
context.go | ||
echo_fs_test.go | ||
echo_fs.go | ||
echo_test.go | ||
echo.go | ||
go.mod | ||
go.sum | ||
group_fs_test.go | ||
group_fs.go | ||
group_test.go | ||
group.go | ||
ip_test.go | ||
ip.go | ||
json_test.go | ||
json.go | ||
LICENSE | ||
log.go | ||
Makefile | ||
README.md | ||
response_test.go | ||
response.go | ||
router_test.go | ||
router.go |
Supported Go versions
Latest version of Echo supports last four Go major releases and might work with older versions.
As of version 4.0.0, Echo is available as a Go module. Therefore a Go version capable of understanding /vN suffixed imports is required:
Any of these versions will allow you to import Echo as github.com/labstack/echo/v4
which is the recommended
way of using Echo going forward.
For older versions, please use the latest v3 tag.
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
- HTTP/2 support
Benchmarks
Date: 2020/11/11
Source: https://github.com/vishr/web-framework-benchmark
Lower is better!
The benchmarks above were run on an Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
Guide
Installation
// go get github.com/labstack/echo/{version}
go get github.com/labstack/echo/v4
Example
package main
import (
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"net/http"
)
func main() {
// Echo instance
e := echo.New()
// Middleware
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// Routes
e.GET("/", hello)
// Start server
e.Logger.Fatal(e.Start(":1323"))
}
// Handler
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
Official middleware repositories
Following list of middleware is maintained by Echo team.
Repository | Description |
---|---|
github.com/labstack/echo-jwt | JWT middleware |
github.com/labstack/echo-contrib | casbin, gorilla/sessions, jaegertracing, prometheus, pprof, zipkin middlewares |
Third-party middleware repositories
Be careful when adding 3rd party middleware. Echo teams does not have time or manpower to guarantee safety and quality of middlewares in this list.
Repository | Description |
---|---|
deepmap/oapi-codegen | Automatically generate RESTful API documentation with OpenAPI Client and Server Code Generator |
github.com/swaggo/echo-swagger | Automatically generate RESTful API documentation with Swagger 2.0. |
github.com/ziflex/lecho | Zerolog logging library wrapper for Echo logger interface. |
github.com/brpaz/echozap | Uber´s Zap logging library wrapper for Echo logger interface. |
github.com/darkweak/souin/plugins/echo | HTTP cache system based on Souin to automatically get your endpoints cached. It supports some distributed and non-distributed storage systems depending your needs. |
github.com/mikestefanello/pagoda | Rapid, easy full-stack web development starter kit built with Echo. |
github.com/go-woo/protoc-gen-echo | ProtoBuf generate Echo server side code |
Please send a PR to add your own library here.
Help
Contribute
Use issues for everything
- For a small change, just send a PR.
- For bigger changes open an issue for discussion before sending a PR.
- PR should have:
- Test case
- Documentation
- Example (If it makes sense)
- You can also contribute by:
- Reporting issues
- Suggesting new features or enhancements
- Improve/fix documentation
Credits
- Vishal Rana (Author)
- Nitin Rana (Consultant)
- Roland Lammel (Maintainer)
- Martti T. (Maintainer)
- Pablo Andres Fuente (Maintainer)
- Contributors