Beego

golang 几大主流框架对比

contrast of golang framworks

qwding

1 minute read

先上表格 如下表格是2016-11-24 日调研结果,2~5列为github数据。 benchmark: beego VS revel VS martini 三大老框架 beego beego 很多人比较熟悉,国人写的,框架主要逻辑是经典MVC形式。 中间件:中间件可以写在beego内置的prepare方法里。 取参:取Query需要自己提取,url参数可以用内置方法。 返回:返回比较固定,想修改返回code比较麻烦。 缺点: 书写unit testing很恶心。 他的侵入式代码风格,还有源代码的多层嵌套,很多人都不太喜欢。 revel revel 也是MVC框架,他的的形式是你在一个配置文件配置路由,当用revel工具执行revel run时候,将在项目目录下生产两个文件/tmp/main.go 和 /routs/routs.go .作用分别为注册路由和绑定路由内参数。 中间件:中间件可以定义在/init.go 里面。 取参:内置提供方法,并且有自己内置的validation方法,方便。 返回:提供多种返回方法。 缺点: 也是侵入式代码。 其他的未实际使用,不予评论 martini 书写简单,写起来和之后要讲的echo,gin很像,但是他的性能较echo和gin差了很多。 从功能上说,并且martini并不像beego和revel那样框架全面,需要自己把架子搭起来。 所以直接就不考虑了。 总结 性能上beego和revel两者不分伯仲,两者的侵入式代码也是为了节省更多的时间,带来了不少便利。对比起来更倾向于用revel做简单的web框架,他的取参和返回值带来的便利性更高一点,并且也会生成路由的testing方法,综合来讲下一次如果写简单的管理界面可能考虑使用revel。 fasthttp vs httpRouter 两者都作为http的框架,可以替代原生的http,他们的优越都是因为速度快,0占用内存著称。可以考虑将他们作为其他框架的http引擎,会提升很大速度。 gorilla mux gorilla 最大好处是他出发点为组件化,各个模块单独成一体,你需要哪个模块,拿过来用就行,不需要可以换成其他写法。 mux是帮你对router更容易管理,其速度来说并不是非常突出。但是docker swarm用的是gorilla mux,足见其有一定可用性。 对于gorilla其他模块,如果缺少哪个模块组件,完全去任你挑选,安全稳定可靠,开发好帮手。 echo VS gin 最想说的两个 无论哪个benchmark,这两个框架的benchmark都已绝对优势排在前列,性能绝对认可。 代码书写上,两个框架写法也很相似,非常简洁,几行代码可勾勒一个http server,如下为gin一个ping serve,是不是超级简单。 package main import "github.com/gin-gonic/gin" func main() { r := gin.

beego 如何不同环境用不同的runmode

Use different runmode of beego.

qwding

1 minute read

beego runmode修改 除了配置文件设置runmode,想切换环境时候需要手动改,太麻烦,而且容易忘 想通过如下两种方法尝试,均无效: flag,但是beego本身并没有flag,简直行不通 官方文档里个的方法是 beego.Runmode = “dev”, 但其实这个方法很鸡肋,很蛋疼,因为读配置文件早在程序运行前执行了,而如果再程序里修改runmode,你在init里用的参数必然还是默认写的,用着基本蛋疼。 我在我本地beego 1.7的环境里又尝试了一下,发现已经没有这个方法了,可能作者也觉得确实蛋疼给删了吧。 环境变量改变 尝试将配置文件的runmode指定为环境变量,然后指定具体模式。发现居然成功了。不管怎么样,确实这个办法还是一个不错的解决方案了 加上docker更好用 因为本来用docker,这样直接在Dockerfile里设置ENV,部署线上的时候,直接用构建好的镜像启动就ok了,什么都不用改了。 懒人使人进步