分享我的第一個(gè) GO 開源項(xiàng)目( xujiajun/gorouter )例驹,一個(gè)簡(jiǎn)單高性能的 router捐韩,和著名的 julienschmidt/httprouter 差不多快,且支持正則鹃锈。很方便寫 RESTful APIs 或者組建你自己的 web 框架荤胁。
項(xiàng)目由來
一開始學(xué)習(xí) golang 的時(shí)候,我是從學(xué)習(xí) go 寫 web 應(yīng)用屎债,自然而然需要一個(gè) web 框架或者 web 路由器仅政。
找到這個(gè) julienschmidt/httprouter (有幾千 star 吧,截止今天 10 月 30 號(hào)盆驹,有 7900+star )圆丹,
使用了下,發(fā)現(xiàn)一般功能有了躯喇,但是看了他的 import 庫运褪,不支持正則,想改他的代碼,發(fā)現(xiàn)各種 if秸讹,嵌套 walk 有種 bad smell 的感覺檀咙,還是放棄。我又試用了另一款著名的路由器 gorilla/mux (也有幾千 star 吧璃诀,截止今天 10 月 30 號(hào)弧可,有 7000+star ),測(cè)了下功能比 julienschmidt/httprouter 強(qiáng)大劣欢,但是性能差太多棕诵。具體見我的 benchmarks。
于是我決定自己寫一個(gè)凿将,一來學(xué)習(xí)下 go校套,二來也能解決下這個(gè)問題。我給自己的目標(biāo):
0牧抵、簡(jiǎn)單
1笛匙、測(cè)試覆蓋率 90%以上,
2犀变、支持基本的路由功能妹孙,
3、支持正則
4获枝、性能要高
5蠢正、文檔要完善
6、原生 go 實(shí)現(xiàn)省店,不要第三方庫
項(xiàng)目地址
https://github.com/xujiajun/gorouter
項(xiàng)目原理
用了數(shù)據(jù)結(jié)構(gòu)壓縮 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)
項(xiàng)目情況
目前項(xiàng)目已經(jīng)提交給awesome-go了,已經(jīng)被收錄了谎脯,也算給 Go 社區(qū)貢獻(xiàn)自己小小的力量。希望大家用得上持寄。
代碼覆蓋率 100%源梭。
examples 里面含有完整例子,方便學(xué)習(xí)使用稍味,如編寫中間件废麻、路由組、路由正則匹配等模庐。
README 用英文寫的烛愧,已經(jīng)完成差不多了,中文如有必要,我再補(bǔ)上怜姿。我建議大家看英文
最后慎冤,最重要的是歡迎大家給我 star ! 提 issues 沧卢!提交 PR 蚁堤!和我交流!
謝謝關(guān)注但狭!后面還有更多 Go 開源作品分享給大家