Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
发现自已有洁癖,总是想找一个完美的东西,以前喜欢过java php python,现在又喜欢上go语言了,这一次我都有些瞧不起自己的善变相了。
但学习了go语言后的确发现了它在很多场景中的表现比我掌握的其它语言要更合适。
简洁的语法和适时的表现
计算机语法对我来讲很重要,习惯了C语言的语法形式后我很难去接受其它语法;只使用过命令式语言,对于函数式语言也不容易接受;go语言语法继承了C语言,同时力求简洁,比如去除while,去除if后的括号,行尾不必加分号,等等。
相比较如C这样的语言,go语言开发起来要轻松很多,我感觉主要是go语言本身就支持现在开发必要的一些模块,比如字符串处理,比如是unicode,比如一些常用的库,像json xml http rpc,甚至websocket,而且有垃圾回收的功能,这样开发时要轻松很多。
运行速度
学习了go语言后第一任务就是测试速度,官方宣称接近C的速度,但结果并不是那样。
第一次,功能是从一个文本文件中逐行读数据依次写入在新文件中,印象中记得用的时间值是:go 1s,php 2s,python 3s。
第二次,用正则表达式解析日志格式,php最快,go要远远慢于php的速度。
第三次,基于第二次的代码,把go中的正则表达式改写(去除.*)后,处理20万行日志时,go用时2分38秒,php用时3分35秒;内存方面go表现的突出,只用了1.8M内存,而php用4.3M。
第四次,基于第三次的代码,去除go的正则表达式,用Split代替,结果go处理20万行的日志只用37秒。
总体来讲并不甚理想,真的应该试试在php中用split后的表现。
官方网站写着应该用go的方式使用GO开发,这个等后面更深入的使用吧。
代码量上看,go还是很不错的,比php写的程序的代码量要小一点。
不习惯的地方
以前都在使用动态语言,动态语言的数据结构很灵活,比如python中的字典,value可以是任何数据类型,而go中的map只能是一种value。这样我在开发复杂的结构时,GO的复杂程度就提高了很多。这一点琢磨了很长时间不得其解,网上相关的中文知识太少了,英文又看不懂,又没有静态语言的编程经验……
总之
语法喜欢,速度满意也期待新的版本,无英文能力学习门槛相对高,期待中文内容的丰富。
加上go的并行特性,我的工作中比较适合用go来开发,今后会优先考虑go语言来开发。