Baa Go web开发框架 Baa

agolangf2016-04-17 16:00:00 • 4355 次点击    
这是一个分享于 2016-04-17 16:00:00 的项目,其中的信息可能已经有所发展或是发生改变。

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接口即可)

中间件

*

gzip

*

logger

*

recovery

*

session

组件(DI)

*

cache

*

render

性能测试

和快速的Echo框架对比 Echo

> 注意:

Echo 在V2版本中使用了fasthttp,我们这里使用 Echo V1 测试。

路由测试

使用 [go-http-routing-benchmark] (https://github.com/safeie/go-http-routing-benchmark) 测试, 2016-02-27 更新.

GitHub API

> 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

案例

目前使用在 健康一线 的私有项目中。

手册

godoc

贡献

Baa的灵感来自 beego echo macaron

License

This project is under the MIT License (MIT) See the LICENSE file for the full license text.

an express Go web framework with routing, middleware, dependency injection, http context.Read More

Latest commit to the main branch on 2-18-2023
Download as zip
授权协议:
MIT
开发语言:
Google Go 查看源码»
操作系统:
跨平台
4355 次点击  
加入收藏 微博
1 回复  |  直到
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传