Golang几大框架的优势和区别?

lovegolang · 2014-08-24 01:34:56 · 73438 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2014-08-24 01:34:56 的主题,其中的信息可能已经有所发展或是发生改变。

Martini、Beego、Revel 等等……

golang-china 讨论组的回答:

苏沛:

试用了一下 Martini , 感觉现在的一些第三方插件数量和质量并不是特别好,会有一些坑或者要自己写些中间件。
总体不如另外两个框架成熟。

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

Fan Yang:

刚刚开始用Beego,也就是图它是中国人做的,有问题可能直接问作者什么的也方便些。

框架的对比。来自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。 多去看看,肯定是有好处的。

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


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

73438 次点击  ∙  4 赞  
加入收藏 微博
32 回复  |  直到 2019-03-01 00:07:10
qiangmzsx
qiangmzsx · #1 · 8年之前

beego是模块化开发,各个模块可以独立使用,也可以替换的。

loader
loader · #2 · 8年之前

几大框架 竟然就只说了这三种。。。。 iris呢? gin呢?

polaris
polaris · #3 · 8年之前
loaderloader #2 回复

几大框架 竟然就只说了这三种。。。。 iris呢? gin呢?

可能14年他们还没有?或者不流行?

loader
loader · #4 · 8年之前
polarispolaris #3 回复

#2楼 @loader 可能14年他们还没有?或者不流行?

我靠, 竟然是14年的文章。。。。

alex_023
alex_023 · #5 · 7年之前

哈哈。补充一下beego: tls设置无法配置加密套件的顺序,且设置方式很low。

jthmath
jthmath · #6 · 7年之前

martini 已经不再维护了

ThomasHuke
ThomasHuke · #7 · 7年之前

用golang做web逻辑层不如做底层。

JJJJJJJerk
JJJJJJJerk · #8 · 7年之前

原生go专注写接口,舍弃掉 session和模版引擎模块 前端交给 vuejs爽歪歪

windy_
windy_ · #9 · 7年之前

用beego五个月了,后来发现我们根本就只是使用它的orm而已。。。

fancyecommerce
fancyecommerce · #10 · 7年之前
oscarzhou
oscarzhou · #11 · 7年之前

gin 如何呢? 我也很诧异这居然是几年前的文章

piaokorg
piaokorg · #12 · 7年之前

千古老坟

90design
90design · #13 · 7年之前

不喜欢 beego的臃肿, 也不太喜欢使用框架

xuanjiang1985
xuanjiang1985 · #14 · 7年之前

这些框架太老了

jong
jong · #15 · 7年之前

用了两年Gin,其他模块全靠自己撸,自己提升很快

zxmin
zxmin · #16 · 7年之前

gin和echo居然没有

johng
johng · #17 · 7年之前

什么,居然没有我大gf:https://gitee.com/johng/gf

aqrun
aqrun · #18 · 7年之前

alphayan
alphayan · #19 · 7年之前

坟贴勿回

mrfantuan
mrfantuan · #20 · 7年之前

坟贴勿回

jamesduan
jamesduan · #21 · 7年之前

不要框架的路过

JackZR
JackZR · #22 · 6年之前

echo gin gf iris 呢?六个比较流行的go web 比较

zhangyasong
zhangyasong · #23 · 6年之前

"github.com/labstack/echo" "github.com/labstack/echo/middleware" "github.com/pangpanglabs/goutils/echomiddleware" "github.com/go-sql-driver/mysql" "github.com/go-xorm/xorm" 这些为啥我都没看到,是不重要么?我们项目基本都有用这些框架。

Keleir
Keleir · #24 · 6年之前

能加上 Web 这个词吗? 框架多了去了

chunyao1986
chunyao1986 · #25 · 6年之前

不要框架的路过

sunjian2009
sunjian2009 · #26 · 6年之前

iris

johng
johng · #27 · 6年之前

https://gfer.me GF(Go Frame)是一款模块化、松耦合、轻量级、高性能的Go语言应用开发框架。支持热重启、热更新、多域名、多端口、多服务、HTTP/HTTPS、动态路由等特性,并提供了Web服务开发的系列核心组件,如:Router、Cookie、Session、服务注册、配置管理、模板引擎、数据校验、分页管理、数据库ORM等等等等,并且提供了数十个实用开发模块集,如:缓存、日志、时间、命令行、二进制、文件锁、对象池、连接池、数据编码、进程管理、进程通信、TCP/UDP组件、并发安全容器、Goroutine池等等等等等等。

BROVO
BROVO · #28 · 6年之前

:thumbsup: 谢谢你的分享@lovegolang

:laughing: 好久远的贴子,能不能再来更新下呢,分享下你的使用框架的感受,小白们排队学习哈

qikexin
qikexin · #29 · 6年之前

好久远的帖子

luaxlou
luaxlou · #30 · 6年之前

gin is better

focussoft
focussoft · #31 · 6年之前

用iris的路过. golang语言没有threadlocal特性太让人遗憾了.

johng
johng · #32 · 6年之前

只想说:https://goframe.org

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传