当前位置: 首页 > news >正文

一个简单高性能的Go router,和httprouter 差不多快,且支持正则

分享我的第一个 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 实现,不要第三方库

项目地址

github.com/xujiajun/go…

项目原理

用了数据结构压缩 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 开源作品分享给大家


相关文章:

  • centos 7更改网卡名字
  • 初识btrace
  • OSChina 周四乱弹 —— 但愿那个嘴上说着拒绝的人,其实心里最爱的是你。
  • Go基础系列:接口类型断言和type-switch
  • PHP多进程
  • SpringMVC基础知识
  • MPAndroidChart 教程:Y轴 YAxis
  • 大快搜索数据爬虫技术实例安装教学篇
  • js递归,无限分级树形折叠菜单
  • Linux环境搭建及命令
  • 区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现
  • 我的前端工具集(九)树工具重新封装和修改
  • Spring Cloud 2.x系列之网关zuul入门(三)
  • Can't create/write to file '/tmp/MLjnvU95' (Errcode: 13 - Permission denied)
  • 互融云保理业务系统助力企业快速拓展业务
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 〔开发系列〕一次关于小程序开发的深度总结
  • eclipse(luna)创建web工程
  • Github访问慢解决办法
  • HTML中设置input等文本框为不可操作
  • Javascript基础之Array数组API
  • Java多态
  • JS 面试题总结
  • Laravel核心解读--Facades
  • Spring声明式事务管理之一:五大属性分析
  • Windows Containers 大冒险: 容器网络
  • windows下如何用phpstorm同步测试服务器
  • 关于extract.autodesk.io的一些说明
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 回顾2016
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 你不可错过的前端面试题(一)
  • 判断客户端类型,Android,iOS,PC
  • 前端设计模式
  • 前嗅ForeSpider采集配置界面介绍
  • 一些css基础学习笔记
  • 原生Ajax
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • "无招胜有招"nbsp;史上最全的互…
  • #QT(TCP网络编程-服务端)
  • (2)nginx 安装、启停
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读40-45)图像描述1
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)appium-desktop定位元素原理
  • (转)3D模板阴影原理
  • (转)socket Aio demo
  • (转)原始图像数据和PDF中的图像数据
  • .Net Web项目创建比较不错的参考文章
  • .Net 路由处理厉害了
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @Autowired标签与 @Resource标签 的区别
  • @Autowired和@Resource的区别
  • @RestControllerAdvice异常统一处理类失效原因