Go web开发框架 Baa

MIT
Google Go
跨平台
2016-04-18
Coldstar

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.

加载中

评论(0)

暂无评论

暂无资讯

暂无问答

golang: Baa框架文章列表

golang: Baa框架文章列表

2016/06/13 11:42
33
0
php正则表达式例子

* 判断字符串是否包含某个单词(例如单词aa) print preg_match("/\baa\b/", " aa ")."\n"; //1 print preg_match("/\baa\b/", "baa ")."\n"; //0 元字符\b表示单词的边界。 * 判断一个字符串表...

2012/10/28 23:54
36
0
other-01-输出数组的所有自组合

关于数组的输出算法

2018/04/19 16:59
3
0
3DTouch使用

- (void)createDynamicShortcutItems {     // create several (dynamic) shortcut items     UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc...

2016/02/26 19:45
71
1
sqlserver相关

批量插入数据 cast 类型转换 自动备份 还原

2015/09/30 11:43
34
0
Linux下多线程查看工具(pstree、ps、pstack)

1. pstree pstree以树结构显示进程 $ pstree -p work | grep ad sshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552) |-{ad_preprocess}(4553) |-{ad_preprocess}(455...

2015/12/23 13:26
169
0
Failed to install XXXX.apk on device '5358baa3': timeout

eclipse连入真机测试的时候老是安装不上。出现一下情况: [2015-03-24 09:50:10 - XXXX] Android Launch! [2015-03-24 09:50:10 - XXXX] adb is running normally. [2015-03-24 09:50:10 - ...

2016/05/11 09:16
13
2
iOS之路14-ANFetworking的简单使用

iOS之路14-ANFetworking的简单使用

2016/02/05 20:13
58
1
正则表达式笔记

## 1.字符 ### 1.1 元字符 | 元字符 | 含义 | | ------ | ---------------------------------------- | | \d | 数字,等同于[0-9] | | \D | 非数字字符,等同于\[^0-9] | | \w | 字母、数字、...

2018/06/01 17:13
16
1
docker在win10上安装

docker win10

2016/04/14 13:32
214
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部