BaaGo web开发框架

联合创作 · 2023-09-20 07:23

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](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)

> 注意:

[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)

> 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](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.

浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报