Go语言吸引我的主要有如下几点:
- 它是系统级别的语言,静态编译,是C系列语言。
- 具有很多内置库,使用起来和Python很类似。
- 语法足够简单,入门学习成本很低,适合我这样从PHP和Python切换过来的人。
- 速度快,就拿简单的页面来说,我用PHP开发并发能够达到500很好了,但是用Go轻松就到上万,这是无法比拟的性能提升,而且用Go开发的效率和PHP差不多。
- 出自Google之手,而且有一帮牛人在维护,基于BSD开源,社区活跃。
- 开源项目给我很多自信,举几个开源系统:vitess(YouTube的数据库proxy系统)、nsq(bitly的一个实时信息处理系统)、skynet(轻量级的分布式服务框架)、七牛公司全部用Go开发、360开发的类iMessage应用,支持上千万用户,同时单台服务器长连80w,这些系统都是他们线上跑的,这给我更大的信心能够用Go来开发高性能,高稳定的应用。
- 语法简洁。C带来的头痛的问题基本都会消失不见。同时,你也不用担心系统的Python或者Ruby版本是多少。Go是一个开发bootstrap工具的 绝妙语言——因为bootstrap工具的运行环境没有任何安装好的依赖。如果你开始使用像docker, packer 或者etcd的工具,Go也会很有帮助。
- 仅仅语言语法、语言特性这个层次的优势不大。go erlang这些语言相对其他语言的优势,在于go erlang这样的语言,不仅仅是一个语言,而是一个操作系统,它定义了自己的任务概念,实现了任务调度管理,使我们的程序可以在多核甚至分布式环境具备很好的伸缩性。你不需要关心有几个核几个CPU,你的程序在2个CPU的系统上就会启动2个线程(OS级别)运行,8个CPU就8个,始终有很好的多核并发能力,充分利用系统资源。这才是这些语言的最大优势所在。
在开发的项目基本都是用Go开发的,但是页面上我还是用JavaScript来渲染,我现在的开发模式是JavaScript渲染前端+RESTful API,中间用JSON数据进行交互。采用这种模式开发主要有几点原因:
- 我认为JavaScript渲染页面方面比Go的模板做的好很多,而且JavaScript现有的库非常多,很容易做出很多效果,我的理念就是不管白猫黑猫,会抓老鼠就是好猫,合适的语言用在合适的地方。
- Go开发API相当地快速,而且性能很高,是PHP、Python之类的不能比拟的。
- 设计成RESTful API的话,系统就比较容易扩展,扩展性比较好。
目前内部的短域名服务采用了Go+redis开发,视频直播调度器全部采用了Go开发,内部的系统监控和自动化运维系统采用了JavaScript+RESTful API的形式开发,还有其他一些边缘项目都是采用Go开发。
同时我还开发了两个开源的项目:
- beego:一个模仿Python的tornado系统开发的Go开发框架,现在开发的几个系统都是基于该框架开发。
- beedb: 一个Go语言的ORM库,可以像操作struct一样操作数据库数据。目前我们内部的API接口我就是采用了这个ORM开发的。