Baa - Go web开发框架


MIT
跨平台
Google Go

软件简介

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 更新.

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

- safeiemicate -
Author
- betty - Language Consultant
- Contributors

License

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