2010年8月离开CSDN后,我基本上就不再使用微软技术了,不过在使用微软.net技术的那段时间,自己写了很多小工具,比如:分析可用的代理服务器,批量处理文本等。离开CSDN后,我用的操作系统主要变成了Ubuntu、MAC。而Windows使用的频率变低了很多。这时候就很纠结,之前的小工具全部没法在非Win下跑了。那时候就强烈的期望改用一个跨平台的语言来实现这些自己常用的脚本工具。
初期的候选语言是python,为此关注过很长一段时间python相关的内容。在关注的python领域,偶尔听说有一门新的语言Golang,很多python程序员由于性能考虑改用Golang,就吸引了我关注Golang。
Golang可以直接编译成可执行文件,执行环境不需要Golang开发环境,这道不错,吸引了我的关注。
2013年春节期间,专门买了七牛许式伟的那本Golang的书,一边编码例子,一边学习。
让我下决心在公司推广使用Golang的原因是因为我看到了下面2篇文章:
Iron.io从Ruby迁移到Go:减少了28台服务器并避免了连锁故障
http://www.infoq.com/cn/news/2013/03/ruby-to-go
Iron.io用Go重写的结果是:
- 服务器数量从30台减少到2台,而且第2台仅用于实现冗余。
- CPU利用率下降至5%以下。
- 所用内存也下降了很多。Rails应用在启动时需要接近50MB内存,而Go版本在启动时只需要几百KB内存。
- 连锁故障成为历史。
- 运行于成百上千台服务器上的新服务完全用Go编写。
- 他们认为,Go的使用使他们得以“构建伟大的产品,得以成长和扩展,同时还能吸引一流人才”。他们的博客中写道:“我们认为,在可预见的未来,它将继续帮助我们成长。”一般建议根据人才库的规模来选择编程语言,他们发现Go语言的选择帮助他们吸引了顶级人才。
- 容易部署,因为Go程序会编译为一个单一静态映像。
- Go存在的小问题:需要学习一种新语言,库还有限。
- 如果服务器流量很高,或者你想应对突发的增长,Go是很好的选择。
另外一个刺激到我的事情是:
360线上一个go语言实现的消息推送服务听说单机一百万并发连接没压力,目标是单机两百万并发
http://milnk.com/link/permacoment/10079/10035/?cm_order=hot
正好在我所在的公司正在研发一个机遇移动手机的APP,这个APP也需要消息推送,另外也要支持实时聊天,对单台服务器的压力要求也很大。这样在这个项目的数据准备爬虫、消息推送、聊天部分就确定用Golang来实现。这也就是我开始深入学习Golang的原因。
另外最近在听说好多游戏公司也在服务器端试用Golang。Golang对协程的支持,使它在大并发方面天生就有优势。而游戏又是对大并发要求很高的。游戏服务器端确实是Golang的一个大舞台。