分享我的第一个 GO 开源项目(xujiajun/gorouter),一个简单高性能的 router,和 julienschmidt/httprouter 差不多快,且支持正则

xujiajun · · 1226 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

分享我的第一个 GO 开源项目( xujiajun/gorouter ),一个简单高性能的 router,和著名的 julienschmidt/httprouter 差不多快,且支持正则。很方便写 RESTful APIs 或者组建你自己的 web 框架。

项目由来

一开始学习 golang 的时候,我是从学习 go 写 web 应用,自然而然需要一个 web 框架或者 web 路由器。

找到这个 julienschmidt/httprouter (有几千 star 吧,截止今天 10 月 30 号,有 7900+star ),

使用了下,发现一般功能有了,但是看了他的 import 库,不支持正则,想改他的代码,发现各种 if,嵌套 walk 有种 bad smell 的感觉,还是放弃。我又试用了另一款著名的路由器 gorilla/mux (也有几千 star 吧,截止今天 10 月 30 号,有 7000+star ),测了下功能比 julienschmidt/httprouter 强大,但是性能差太多。具体见我的 benchmarks。

于是我决定自己写一个,一来学习下 go,二来也能解决下这个问题。我给自己的目标:

0、简单

1、测试覆盖率 90%以上,

2、支持基本的路由功能,

3、支持正则

4、性能要高

5、文档要完善

6、原生 go 实现,不要第三方库

项目地址

https://github.com/xujiajun/gorouter

项目原理

用了数据结构压缩 Trie

Features:

Fast - see benchmarks

URL parameters

Regex parameters

Routes groups

Custom NotFoundHandler

Custom PanicHandler

Middleware Chain Support

Serve Static Files

Pattern Rule Familiar

HTTP Method Get、Post、Delete、Put、Patch Support

No external dependencies (just Go stdlib)

项目情况

目前项目已经提交给awesome-go了,已经被收录了,也算给 Go 社区贡献自己小小的力量。希望大家用得上。

代码覆盖率 100%。

examples 里面含有完整例子,方便学习使用,如编写中间件、路由组、路由正则匹配等。

README 用英文写的,已经完成差不多了,中文如有必要,我再补上。我建议大家看英文

最后,最重要的是欢迎大家给我 star ! 提 issues !提交 PR !和我交流!

谢谢关注!后面还有更多 Go 开源作品分享给大家


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1226 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传