Baa 一个简单高效的Go web开发框架。主要有路由、中间件,依赖注入和HTTP上下文构成。
Baa 不使用 反射
和正则
,没有魔法的实现。
快速上手
安装:
go get -u gopkg.in/baa.v1
示例:
package main import ( "gopkg.in/baa.v1" ) func main() { app := baa.New() app.Get("/", func(c *baa.Context) { c.String(200, "Hello World!") }) app.Run(":1323") }
特性
*
支持静态路由、参数路由、组路由(前缀路由/命名空间)和路由命名
*
路由支持链式操作
*
路由支持文件/目录服务
*
支持中间件和链式操作
*
支持依赖注入*
*
支持JSON/JSONP/XML/HTML格式输出
*
统一的HTTP错误处理
*
统一的日志处理
*
支持任意更换模板引擎(实现baa.Renderer接口即可)
中间件
*
*
*
*
组件(DI)
*
*
性能测试
和快速的Echo框架对比 Echo
> 注意:
Echo 在V2版本中使用了fasthttp,我们这里使用 Echo V1 测试。
路由测试
使用 [go-http-routing-benchmark] (https://github.com/safeie/go-http-routing-benchmark) 测试, 2016-02-27 更新.
> Baa的路由性能非常接近 Echo.
BenchmarkBaa_GithubAll 30000 50984 ns/op 0 B/op 0 allocs/op BenchmarkBeego_GithubAll 3000 478556 ns/op 6496 B/op 203 allocs/op BenchmarkEcho_GithubAll 30000 47121 ns/op 0 B/op 0 allocs/op BenchmarkGin_GithubAll 30000 41004 ns/op 0 B/op 0 allocs/op BenchmarkGocraftWeb_GithubAll 3000 450709 ns/op 131656 B/op 1686 allocs/op BenchmarkGorillaMux_GithubAll 200 6591485 ns/op 154880 B/op 2469 allocs/op BenchmarkMacaron_GithubAll 2000 679559 ns/op 201140 B/op 1803 allocs/op BenchmarkMartini_GithubAll 300 5680389 ns/op 228216 B/op 2483 allocs/op BenchmarkRevel_GithubAll 1000 1413894 ns/op 337424 B/op 5512 allocs/op
HTTP测试
Baa:
package main import ( "github.com/baa-middleware/logger" "github.com/baa-middleware/recovery" "gopkg.in/baa.v1" ) func hello(c *baa.Context) { c.String(200, "Hello, World!\n") } func main() { b := baa.New() b.Use(logger.Logger()) b.Use(recovery.Recovery()) b.Get("/", hello) b.Run(":8001") }
Echo:
package main import ( "github.com/labstack/echo" mw "github.com/labstack/echo/middleware" ) // Handler func hello(c *echo.Context) error { return c.String(200, "Hello, World!\n") } func main() { // Echo instance e := echo.New() // Middleware e.Use(mw.Logger()) // Routes e.Get("/", hello) // Start server e.Run(":8001") }
测试结果:
> Baa 在http中的表现还稍稍比 Echo 好一些。
Baa:
$ wrk -t 10 -c 100 -d 30 http://127.0.0.1:8001/ Running 30s test @ http://127.0.0.1:8001/ 10 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.92ms 1.43ms 55.26ms 90.86% Req/Sec 5.46k 257.26 6.08k 88.30% 1629324 requests in 30.00s, 203.55MB read Requests/sec: 54304.14 Transfer/sec: 6.78MB
Echo:
$ wrk -t 10 -c 100 -d 30 http://127.0.0.1:8001/ Running 30s test @ http://127.0.0.1:8001/ 10 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.83ms 3.76ms 98.38ms 90.20% Req/Sec 4.79k 0.88k 45.22k 96.27% 1431144 requests in 30.10s, 178.79MB read Requests/sec: 47548.11 Transfer/sec: 5.94MB
案例
目前使用在 健康一线 的私有项目中。
手册
贡献
- safeie、micate - Author
- betty - Language Consultant
- Contributors
License
This project is under the MIT License (MIT) See the LICENSE file for the full license text.