golang选型从满怀期待到遗憾放弃后,我决定推广golang

winlion · · 10329 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

2017年我们公司需要快速迭代一款产品,当时,我们团队的后端框架是spring mvc ,该框架结构清晰,上手快,但是由于我们的产品迭代速度快,底层数据库操作接口变动频繁,导致service层工作量巨大,不胜其烦。另外,随着项目的成长,代码量越来越大,项目启动越来越慢,严重影响了开发调试速度。

在这种情况下,我们希望寻找一种新的框架或编程语言,我们期望他具备调试简单,上手快,启动速度快,保密性高,以及适用于高并发及web编程,性能优越等优点。当时手上备选框架有spring boot和golang,综合比较,在巨大的遗憾中,我们选择了springboot,相关选型参考信息如下。

1、从功能满足度比较

在启动该产品研发时,我们梳理了自己的需求,主要在三个方面,一是支持高性能的restful api服务,二是支持web页面服务,三是支持快速跌代。Restful接口及性能方面,spring boot 和golanbg 都支持,且性能区别不大。页面服务方面,spring boot 封装了springmvc,相对成熟度更高,并且由于大量javaer的长期积累,该框架已经非常成熟;而go lang 方面,也有成型的框架,如beego,但是该框架使用度并不高.究其原因,是因为beego没有形成像php框架那样的生态,比如行业内php开源框架thinkphp,目前基于该框架已经形成了大量的cms,商城,erp,微信管理等软件,这也是我为什么要写这篇文章的原因,我希望通过通过这一系列文章,让更多的人认识到go语言,并参与到golang 的生态搭建中来。回归正题,功能满足度,spring boot更胜一筹。

2、学习成本

我们需要考虑到团队的学习成本,当时团队已经非常熟悉spring mvc框架,如果切换spring boot,学习成本几乎为零,但是若切换到golang,学习成本相对较高。另外,网络上关于golang框架,推荐并不多,比如gin,decho,以及beego,我们重点了解了beego框架,知乎上争论颇多。这些,都让我们对是否使用go语言,心里预期上打了一些折扣。

3、项目迁移成本

在选择框架的时候,我们还考虑了我们的集成成本。我们的客观情况是:公司的技术栈以及这些技术栈形成的项目积累,几乎都是java,如果我们切换到golang,那么产品运维成本将相对较高,另外由于目前行业类golang 从业者较少,如果我们采用go,将人为地为我们的项目团队组建带来巨大的难度.

4、社区活跃度

Go语言社区活跃度并不高,具体可以看如下几个方面

l 百度搜索指数

下图是golang 和java 以及php的搜索指数,近段时间以来,golang关注度不断下降,已经到日均1000pv,如果golang不孵化生态圈,将面临淘汰.事实上,在百度上搜索golang,很多都是2014年的旧事了。

l Go技术论坛

笔者2018-02-10 18:11访问了https://studygolang.com/ 首页截图如下

该社区在百度搜索go语言论坛 排名第一,但是日更新不超过20篇文章,一股悲凉浮在心头。

下图为golang csdn社区论坛,一周以内不超过10篇帖子,心中又凉了半截。

l Github go 活跃度

下图为github发布的编程语言2017年度排行Go语言排行第九.这意味着全球活跃度还是有,但相比php,java等而言go还有很长的任务要走。

4、我计划怎么做

个人觉得golang 是一款非常优秀的语言,但是非常遗憾,目前还不是我们团队的最优选择,为了弥补这份遗憾,我们需要做些什么。为了推广GO语言,我做出了如下工作计划计划

1、写作一系列文章,演示如何集成golang web框架。

这些文章的目的不是在于集成一个golangweb 框架,而是在于演示如何集成一个golang框架,原因如下

  • golang框架已经很多。国外的如matini,revel,gin等,国内也有beego.这些框架都很优 秀,各有所长,但也正是因为这些,所以有毁有誉,当然这不是重点。
  • 我们往往会碰到很多场景,现有的框架能解决我们的问题,但不是最好的解决方案, 需要定制我们自己的框架。
  • 我们对框架有要求,希望简单好用,同时又希望具备高扩展性和开发性。
  • 我们看到上述各种框架的优势,我们希望将他们整合起来,扬长补短。

基于如上原因,我决定不重新制造轮子,而是给大家做一个示例,怎么制造轮子。同样地,正是因为这些因素,我们在搭建过程中会大量使用第三方优秀成果,这从根本上决定了我们产品的开放性。

2、丰富golang应用生态圈。

golang 上手简单,和php有点相似,有人甚至会认为golang是一种解释性语言。Golang效率高,天然支持并发,性能好,又能打包成可执行文件,无需容器,安全可靠,但是为什么这么一种语言,为什么没有获得和php一样高的使用率呢?我认为主要是golang应用生态圈没有丰富起来。

  • 长期以来,人们认为golang 只适合做高并发,高科技的事儿,这可能是因为golang出 生高贵吧,golang在又拍云得到大规模运用,和云计算沾上边儿,有点曲高和寡的味 道。
  • l类比php,我们会发现博客软件有wordpress,cms 有织梦帝国,商城有ecshop、 ecmall,开元框架有thinkphp,laravel,yii,而golang语言,我们有什么?应用生态 圈极度缺乏。
  • 类比java, java有庞大的生态圈和中间件,java已经是企业级应用的首选语言,这不 单是因为java性能好,跨平台,还因为java已经有好几代使用者,是忠实粉丝,而 golang,使用者都是弄潮儿。

以上几点可以看出,丰富golang生态是golang推广的重中之重。

3、大力宣传和推广golang。

我计划大力宣传和推广golang,具体做法如下

  • 宣传和推广golang传统行业应用场景,主要包括cms应用,个人博客应用,商城应用、 微信管理后端等五大基础领域。
  • 宣传和推广golang移动互联网应用场景,golang具备天然的高并发优势和快速迭代 优势,我们可以golang推广到互联网场景应用,如小游戏上。
  • 挖掘新的golang使用场景,使golang更接地气,如秒杀、拍卖、大数据采集和处理等 场景都是golang用武之地。
  • 其他渠道如搜索引擎seo推广、行业热点推广

如下一系列文章是本次工作中的一部分,详细列表如下,点击即可访问,后续我将继续提供开源代码

  • restgo后台管理框架
  • 天天任务清单小程序
  • 工业大数据采集
  • restgo cms 
  • restgo 千人大群

源代码获取地址 http://www.imwinlion.com

golang实战使用gin+xorm搭建go语言web框架restgo详解1.1 go语言的困境

golang实战使用gin+xorm搭建go语言web框架restgo详解1.2 我要做什么

golang实战使用gin+xorm搭建go语言web框架restgo详解2 框架基本架构

golang实战使用gin+xorm搭建go语言web框架restgo详解3 系统常用配置参数

golang实战使用gin+xorm搭建go语言web框架restgo详解4 路由配置

golang实战使用gin+xorm搭建go语言web框架restgo详解5 控制器C

golang实战使用gin+xorm搭建go语言web框架restgo详解5.2 跳转和重定向

golang实战使用gin+xorm搭建go语言web框架restgo详解5.3 资源控制器

golang实战使用gin+xorm搭建go语言web框架restgo详解5.4 控制器参数绑定

golang实战使用gin+xorm搭建go语言web框架restgo详解5.5 控制器模型绑定

golang实战使用gin+xorm 搭建 go语言web框架restgo搭建详解5.6 控制器参数校验

Golang go语言整合gin+xorm 搭建 web框架restgo搭建详解5.7 控制器数据响应

golang实战使用gin+xorm搭建go语言web框架restgo详解5.9 控制器controller编程

golang实战使用gin+xorm搭建go语言web框架restgo详解6.1 模型M和Orm

golang实战使用gin+xorm搭建go语言web框架restgo详解6.4 推荐编程方式

golang实战使用gin+xorm搭建go语言web框架restgo详解7 视图层V

golang实战使用gin+xorm搭建go语言web框架restgo详解8 关于模板

golang实战使用gin+xorm搭建go语言web框架restgo详解9 session、日志、鉴权

作者简介:胡文林,持续创业者,长期从事技术开源工作。微信号jiepool-winlion


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

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

10329 次点击  ∙  1 赞  
加入收藏 微博
5 回复  |  直到 2018-02-23 14:00:42
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传