分享我的第一個 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 開源作品分享給大家