AI 中文社区(简称 AI 中文社),是国内学习交流AI人工智能技术的中文社区网站,这里可获取及贡献任何AI人工智能技术,我们追求自由、简洁、纯粹、分享的多元化人工智能社区。
Go Web 框架中哪个比较符合 Go 官方推荐原则的?
如果你想找符合 Go 官方原则的 Web 框架或 http 中间件,我这里推荐两个:
https://github.com/urfave/negroni 这个不是框架,只是 net/http 中间件,是 martini 框架的胞弟,当然作者(Code Gangsta)是同一个人,当初作者坦言后悔开发了 martini 框架,因为它违背了 Go 官方类库的使用习惯和流程,在开发 martini 过程中,他早就意识到在 Go 的世界里,压根不需要框架,多数的框架都是多余,Go 社区应该以中间件的方式去专注创作、去百花齐放,专业的人做专业的事情,做精而美的中间件。martini 诞生后,很多人趋之若鹜,也有很多吐槽它的性能,相继第三方评测出好用的 martini 性能低下的情况下,作者呼吁大家放弃 martini ,不是因为性能问题,而是自己当初想法不够成熟,不值得使用。最后自己重新开发出一个自认为完美的中间件 negroni,后来部分人非常喜欢 martini 的开发方式,扬言延续 martini 的生命,所以才有后来国人另起炉灶,基于 fasthttp 模仿 martini 方式开发出了 gin ,其实 martini 和 gin 使用流程上是有违背 Go net/http 正规使用原则的,它们会影响众多组件的使用方式,以至社区人群产生了两级分化,最后部分人不得不分道扬镳。多年以后,随着 martini 人气慢慢不降,使用者转向了 gin,但我觉得,并不是 star 越高的东西一定是最好最地道的东西,Go 本身从语法和思维上,有别于其他主流语言,不要一味的造轮子模仿。
github.com/go-chi/chi 这个框架,应该受到 negroni 和 goji 的启发,作者(pkieltyka)思维上和 Code Gangsta 高度一致,做了合理的改变与优化,解决了 negroni 一些痛点,慢慢演变出来了 chi web 框架,该框架很轻量,使用它时,似乎发现不到它的存在,和 negroni 一样,好像直接使用原生 http 一样,和原生的其他库,保持高度的兼容。两者区别是:chi 增加了完美的路由器组件,并且也符合 Go 的使用原则,路由器包囊了目前最流行的用法,比如正则匹配,分组,挂载,拦截器等等,chi 自家的中间件也更加丰富,而 negroni 没有路由器,需要依赖第三方路由器(前期 Go 原生路由器 ServerMux 比较简陋,不过现在已经慢慢完善,这个再次证实了 Code Gangsta 的正确性),negroni 自家中间件也是点到即止,不多不少,只有必要的,比如经典模式,静态文件服务,日志,异常等,其他中间件都交给其他人,比如 render,configure, corn, form 这些常用的组件,其他人都为 negroni 打造出来了不少的中间件,因为只要按照官方原则开发中间件,一般都可以很好的兼容 negroni。
如果你追求高性能和低内存的 web 框架,你也许可以选择 fiber 和 gin,这两个框架目前人气非常高。
游客
- 一字一句需斟酌,一言一语显风范。
- 评论消耗5积分,点赞、收藏消耗3积分。