分享我的第一個 GO 開源專案(xujiajun/gorouter),一個簡單高效能的 router,和 julienschmidt/httprouter 差不多快,且支援正則

xujiajun發表於2018-10-30

分享我的第一個 GO 開源專案( xujiajun/gorouter ),一個簡單高效能的 router,和著名的 julienschmidt/httprouter 差不多快,且支援正則。很方便寫 RESTful APIs 或者組建你自己的 web 框架。

專案由來

一開始學習 golang 的時候,我是從學習 go 寫 web 應用,自然而然需要一個 web 框架或者 web 路由器。
我打算找一款Router自己編寫框架,找到這個 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 開源作品分享給大家

相關文章