Go语言新手该怎么选择Web框架学习?
所有初学Go语言的同学好像都会遇到一个问题:
该怎么选择Web框架学习?
我们建的交流群里面,新人问得最多的问题就是这个。
于是就有了这篇文章,我们详细来讨论下这个问题。
框架
我们要聊框架,就先分析下 go 语言里面的框架。
如果你有一定基础,用过一些框架,比如 gin 这些,你会发现它和 java 的框架不太一样;
好像没有一堆的代码需要拉到本地,也不需要在固定的文件结构里面写代码。
你似乎感觉你用的不是一个框架,好像就是一个包。
对,就是像一个包。
你或许会怀疑,gin 是不是个例,其实不是,其他像 go 里面比较出名的微服务框架 go-micro 也是如此。
go 语言里面的大部分框架都是这样的,使用时都是像一个包一样,大部分框架都不会约束你的文件结构,你想怎么建文件结构,随你心情。
这样一来,对开发者的要求相对来说就会高一些。
你需要理解框架是怎么运行的,你才可能知道怎么去开箱使用框架。
不能像其他语言的框架,你只需要在指定的文件夹,写固定代码,然后 run 就好了,稀里糊涂的就启动了程序。
为什么 Go 语言的框架不像框架?
不是说别的语言框架不好,也不是说 go 语言的框架就多好。
语言和框架都是时代的产物,一个框架的流行,必定和当时的技术趋势有关。
在微服务出现之前,大都是单体服务。
单体服务,需要处理很多问题,比如:页面渲染、数据流转、安全过滤等,每一个模块都需要顾忌到。
但是这些问题里面,大多数项目都是可以通用的,于是这部分就沉淀到了框架。
使用框架的人,就只需要去专心处理业务部分的代码即可。
所以,你会发现,之前的框架大都属于全家桶,大而全的风格。
但微服务概念出现之后,大家都不再喜欢开发大而全的服务了。
大家开始喜欢把不同的模块,独立成不同的服务。
这样渐渐的框架就开始往小而美的方向发展,尽量各司其职最好,互相依赖的越少越好。
试问现在做后端开发的,有多少同学还在用后端语言去渲染前端页面?
Go 怎么选框架学习?
最后我们回到主题,我们来列一下常见的 Web 框架,大致可以分为两个流派:
一个是大而全的,如:Beego 、Revel 等;
这类框架的特点是按 MVC 的方式去构建,如果要开发单体服务,或者需要渲染页面的服务,是比较好的选择。
另一个是小而美的,如:Gin 等;
这类不太像框架的框架,你也可以说他就是一个路由包,这类框架他非常适合去开发纯 API 的服务,他封装的功能非常有限。
是不是这么一分之后,再去选框架就容易多了!
尽管分类了,但是还是有这么多框架,该怎么学呢?不可能全部挨个学吧?
答案是否定的,如果你确实时间够多,全部挨个学也可以。
如果没有那么多精力的同学,就需要反复思考这句话了:框架是时代的产物!
所以选择框架学习时:
一、首先考虑学习框架的动力
学习和工作,是两个领域。
学习的技术不一定是为了工作,但是工作的技术你必须学习。
二、考虑你当前所处的技术环境是怎么样的?
如果你所处的技术环境还在单体服务,那就干大而全的框架。
如果你的技术环境已经开始往微服务跑了,最好是干小而美的框架。
如果你不知道自己当前所处的技术环境,精力也有限,那就从小而美的框架开始学习,搞定小而美的框架,再去搞一搞大而全的框架最稳妥。
你学废了么?