7天从入门到放弃?这个项目教你7天用Go从零实现 Web 框架
开发中使用过或者感兴趣的包。7 天从入门到放弃? 这个项目教你 7 天用 Go 从零实现 Web 框架
大家好,我是欧盆索思(opensource),每天为你带来优秀的开源项目!今天推荐一个 7 天用 Go 从零实现 Web 框架的开源项目。
先介绍一下作者的这个 7 天系列:
7 天能写什么呢?类似 Gin 的 Web 框架?类似 groupcache 的分布式缓存?或者一个简单的 Python 解释器?这是作者 极客兔兔 的解释。
今天推荐的这个 7 天系列就是用 Go 实现一个类似 Gin 的 Web 框架:Gee。项目地址:https://github.com/geektutu/7days-golang/tree/master/gee-web
Gee 框架
这个 7 天系列教程将使用 Go 语言实现一个简单的 Web 框架。作者第一次接触 Go 语言的 Web 框架是Gin
,Gin
的代码总共是 14K,其中测试代码 9K,也就是说实际代码量只有 5K。
时间关系,同时为了尽可能地简洁明了,这个框架中的很多部分实现的功能都很简单,但是尽可能地体现一个框架核心的设计原则。例如Router
的设计,虽然支持的动态路由规则有限,但为了性能考虑匹配算法是用Trie树
实现的,Router
最重要的指标之一便是性能。从这个框架的源码,你会看到 Gin 的影子,作者参考了 Gin 的一些实现。
目录
作者的这一系列,不止是代码实现,同时配套有完整的文章教程。跟着一步步走,你可能就不会 7 天从入门到放弃了。
该系列的目录如下:
- 第一天:前置知识(http.Handler 接口)[1],Code - Github[2]
- 第二天:上下文设计(Context)[3],Code - Github[4]
- 第三天:Tire 树路由(Router)[5],Code - Github[6]
- 第四天:分组控制(Group)[7],Code - Github[8]
- 第五天:中间件(Middleware)[9],Code - Github[10]
- 第六天:HTML 模板(Template)[11],Code - Github[12]
- 第七天:错误恢复(Panic Recover)[13],Code - Github[14]
希望你喜欢,阅读原文可以直达项目,给作者 Star 的同时,也给 欧盆索思 一个在看或转发吧!
参考资料
[1]前置知识(http.Handler 接口): https://geektutu.com/post/gee-day1.html[2]Code - Github: https://github.com/geektutu/7days-golang/tree/master/gee-web/day1-http-base[3]上下文设计(Context): https://geektutu.com/post/gee-day2.html[4]Code - Github: https://github.com/geektutu/7days-golang/tree/master/gee-web/day2-context[5]Tire 树路由(Router): https://geektutu.com/post/gee-day3.html[6]Code - Github: https://github.com/geektutu/7days-golang/tree/master/gee-web/day3-router[7]分组控制(Group): https://geektutu.com/post/gee-day4.html[8]Code - Github: https://github.com/geektutu/7days-golang/tree/master/gee-web/day4-group[9]中间件(Middleware): https://geektutu.com/post/gee-day5.html[10]Code - Github: https://github.com/geektutu/7days-golang/tree/master/gee-web/day5-middleware[11]HTML 模板(Template): https://geektutu.com/post/gee-day6.html[12]Code - Github: https://github.com/geektutu/7days-golang/tree/master/gee-web/day6-template[13]错误恢复(Panic Recover): https://geektutu.com/post/gee-day7.html[14]Code - Github: https://github.com/geektutu/7days-golang/tree/master/gee-web/day7-panic-recover