Baa Go web开发框架 Baa

agolangf • 4058 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
** Baa ** 一个简单高效的Go web开发框架。主要有路由、中间件,依赖注入和HTTP上下文构成。 Baa 不使用 ``反射``和``正则``,没有魔法的实现。 **快速上手** **安装:** <pre class="brush:cpp; toolbar: true; auto-links: false;">go get -u gopkg.in/baa.v1</pre> **示例:** <pre class="brush:cpp; toolbar: true; auto-links: false;">package main import (     &#34;gopkg.in/baa.v1&#34; ) func main() {     app := baa.New()     app.Get(&#34;/&#34;, func(c *baa.Context) {         c.String(200, &#34;Hello World!&#34;)     })     app.Run(&#34;:1323&#34;) }</pre> ** 特性 ** * 支持静态路由、参数路由、组路由(前缀路由/命名空间)和路由命名 * 路由支持链式操作 * 路由支持文件/目录服务 * 支持中间件和链式操作 * 支持依赖注入* * 支持JSON/JSONP/XML/HTML格式输出 * 统一的HTTP错误处理 * 统一的日志处理 * 支持任意更换模板引擎(实现baa.Renderer接口即可) ** 中间件 ** * [gzip](https://github.com/baa-middleware/gzip) * [logger](https://github.com/baa-middleware/logger) * [recovery](https://github.com/baa-middleware/recovery) * [session](https://github.com/baa-middleware/session) ** 组件(DI) ** * [cache](https://github.com/go-baa/cache) * [render](https://github.com/go-baa/render) **性能测试** 和快速的Echo框架对比 [Echo](https://github.com/labstack/echo) **&gt; 注意:** [Echo](https://github.com/labstack/echo) 在V2版本中使用了fasthttp,我们这里使用 [Echo V1](https://github.com/labstack/echo/releases/tag/v1.4) 测试。 ** 路由测试 ** 使用 [go-http-routing-benchmark] (https://github.com/safeie/go-http-routing-benchmark) 测试, 2016-02-27 更新. [GitHub API](http://developer.github.com/v3) &gt; Baa的路由性能非常接近 Echo. <pre class="brush:shell; toolbar: true; auto-links: false;">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</pre> ** HTTP测试 ** Baa: <pre class="brush:cpp; toolbar: true; auto-links: false;">package main import ( &#34;github.com/baa-middleware/logger&#34; &#34;github.com/baa-middleware/recovery&#34; &#34;gopkg.in/baa.v1&#34; ) func hello(c *baa.Context) { c.String(200, &#34;Hello, World!\n&#34;) } func main() { b := baa.New() b.Use(logger.Logger()) b.Use(recovery.Recovery()) b.Get(&#34;/&#34;, hello) b.Run(&#34;:8001&#34;) }</pre> Echo: <pre class="brush:cpp; toolbar: true; auto-links: false;">package main import ( &#34;github.com/labstack/echo&#34; mw &#34;github.com/labstack/echo/middleware&#34; ) // Handler func hello(c *echo.Context) error { return c.String(200, &#34;Hello, World!\n&#34;) } func main() { // Echo instance e := echo.New() // Middleware e.Use(mw.Logger()) // Routes e.Get(&#34;/&#34;, hello) // Start server e.Run(&#34;:8001&#34;) }</pre> ** 测试结果: ** &gt; Baa 在http中的表现还稍稍比 Echo 好一些。 Baa: <pre class="brush:shell; toolbar: true; auto-links: false;">$ 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</pre> Echo: <pre class="brush:shell; toolbar: true; auto-links: false;">$ 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</pre> ** 案例 ** 目前使用在 健康一线 的私有项目中。 ** 手册 ** [godoc](http://godoc.org/github.com/go-baa/baa) ** 贡献 ** Baa的灵感来自 [beego](https://github.com/astaxie/beego) [echo](https://github.com/labstack/echo) [macaron](https://github.com/go-macaron/macaron) - [safeie](https://github.com/safeie)、[micate](https://github.com/micate) - Author - [betty](https://github.com/betty3039) - Language Consultant - [Contributors](https://github.com/go-baa/baa/graphs/contributors) ** License ** This project is under the MIT License (MIT) See the [LICENSE](https://raw.githubusercontent.com/go-baa/baa/master/LICENSE) file for the full license text.
授权协议:
MIT
开发语言:
Google Go 查看源码»
操作系统:
跨平台
4058 次点击  
加入收藏 微博
1 回复  |  直到
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传