Go 语言的 Web 框架

我去年开始研究Go语言,不知不觉快有一年了。以前我研究php和nodejs,都是弱类型的解释性语言。想找一个编译型的强类型语言继续学习,就选中了新奇的Go语言。我只关注Web方面的应用,看了很多有兴趣的开源的Go Web框架,随便吐槽一下。

revel

revel  是最早的 Go 语言 Web 框架,借鉴的java和scala语言的 play 框架 的很多想法。最早我看 play 1.x 时期在 java 社区似乎带来一股全新的风气,感觉是很有意思的事情。后来 play 2.x 转投 scala 阵营,把 java 开发者带入深渊,被很多人无情的吐槽。如今,play 社区还是不温不火的,国内应用也小众。

revel 这玩意儿带有和 play 一样的毛病,舍弃了原有的标准完全自己来。revel 完全不理 Go 标准库的一套,全部是自己的概念;类似的 play 舍弃了 servlet 3 标准。结果就是,我看了半天,还是不晓得该怎么用。自带的概念太多,是个障碍啊!

当然,revel 的案例还是有的,比如 山坡网。他的作者的博客也有很多关于 revel 的教程文章。

beego

beego 是国内最火热的框架吧。当初借着给他贡献一些代码注释,通读了整个的源码。要按我的想法,这是一个比较中型的框架。除了基础的 MVC 结构外,还带有 Cache,ORM,Session 等多个库的支持。像这样面面俱到,对开发者而言是好事。

但是面面俱到的问题是,能不能用别人的 Session 或者 Cache 呢?已经有使用 xorm 这个 ORM 库代替 beego 自带的 ORM 的案例。不过总会有一种错觉:“它提供了就用它自己的吧,别的万一出问题还不会搞”,额呵呵呵。

beego 用的人很多,文档也很齐全(更新不太及时),社区和Q群也很活跃。因而,选择 beego 是不错的。

martini

martini 是新锐的框架,概念非常不错。不过,martini 只是一个微型框架,只带有简单的核心,路由功能和依赖注入容器inject。因此很多东西需要自己写,比如 view,session 等。而且目前也没有看到比较好的与数据库结合使用的例子。学习起来有一点困难。

换个角度说,martini 营造的不是一个大而全的框架,而是一种组件生态 martini-contrib。这个就是 nodejs 中的 expressjs 在做的事情。而且他的 DI 实现,让第三方库很容易改造为 martini 规范的中间件。倘若组件多起来,相信会有很大前途的。

不过,由于依赖注入的实现依赖 reflect 反射,而 Go 语言的反射库效率很差。过多的中间件肯定会拖慢整体的速度。这就只能看 Go 语言以后的发展咯。

总结一下
主要的框架现在是这三个。其实还有很多挺好玩的实现,比如类似 java struct的 xweb,类似 python flask 的 entropy 和 ASP.NET MVC 的 goku。 多去看看,肯定是有好处的。

但是,更重要的,熟悉标准库 !!!!!!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。