自从4月初到新公司以来,不知不觉使用了5个月的go语言了,开发了一个普通的后台API,一个短链接服务,还用go写了一个搜索引擎,总的感觉非常棒,真的很爽,开发效率和之前的c比起来不知道高了多少倍,而且更舒服的是感觉用起来和c差别不大,指针什么的也都有。
作为一个c和c++的程序员,而且是个老程序员,总希望写代码的时候什么东西都可以自己控制,不知道是不是大部分的c程序员都有这样的感觉,在写某一个函数的时候,一边声明变量一边就想象着这个函数的栈空间是什么样子的,写递归的时候也想着这个栈是如何生长的,是否可以改成尾递归的形式。
用了go以后,感觉有点不一样了,主要体现在下面几个方面。
golang实际上不是标准的面向对象的语言,但正因为这样,其实写起代码来自由很多,不用再教条式的使用简单工厂啊,抽象工厂啊等等设计模式,把接口用活就行了。
error返回值,这个已经被很多人喷过了,但是这一点我觉得比较对C程序员的味口,没有那么多异常抛出,每个函数都有明确的返回值告诉你成功还是失败,我个人觉得比java那种抛异常要明确不少,虽然代码看上去比较��嗦。协程和管道的使用,大大的提高了生产效率,同时对你的编程思想也有一定的影响,很多事情都会考虑是否能用并行来解决问题,而且这两者的开销都非常小,在初期基本上不用太考虑效率和损耗的问题,这给初学者写服务器端程序提供了很大的帮助。函数终于变成了一等公民,高阶函数,闭包随便搞,很多新的函数式编程思想也可以比较舒服的用在golang中,同样,这些也是提高生产效率的利器。
第三方资源很多,而且越来越多,但是golang是定义成服务器开发语言的,如果你一定要拿他来做离线数据处理,第三方包肯定比不过python,如果你要拿他来做界面开发肯定也比不过其他开发语言,我觉得golang最适合用来开发web端的API程序,追求速度,稳定,容易部署,跨平台。
上面我觉得都是优点,缺点的嘛,我觉得有一条非常明显的缺点:
垃圾回收,有垃圾回收,应该算是个优点,让你不用关心new了的对象什么时候释放,虽然垃圾回收有效率问题,但是效率问题是在慢慢优化中的,1.5以后应该也会改善不少。
可是作为一个老程序员,有些时候(其实是很多时候)你并不知道你的程序的栈空间是什么样子的,而且有垃圾回收的语言,到底用了多少内存你心里是没有底的,特别是作为一个搜索引擎的开发者,当你不确定内存用了多少,特别是不确定内存用在了哪些地方,哪些内存还没释放,心里是感觉非常慌的,真的,不骗你,就是很慌,用惯了c和c++,对程序自己管理内存总不放心,其实并不是不放心,是没有自己管理来得直接,想用了直接new一个,不想用了直接delete,不用管GC,当然,你可以说出一万个有自动垃圾回收的语言的好处,但我也能说出一个自己管理内存的好处:自由。
说了这么一些,总的来说,我个人还是非常推荐golang的。
Read full article from golang使用感受
No comments:
Post a Comment