go内置了string, array, map甚至是指针等类型,满足了C语言玩家对指针的依赖的同时也方便了程序的开发。提供了较完善的基础类型系统,给开发确实能够带来很高的效率。除了完善类型系统外,还提供了简单的封装,实现面向对象编程,这一切都是在语言层面得到的支持,而不是自己蹩足的用C语言进行面向对象编程。时至今日,面向对象的价值还不是那么明显,特别是java,c++等提供了庞大的语言系统,各种接口,各种继承,抽象不断,太容易导致过度设计;
但go语言提供的是只是最基本的对象封装,没有那些复杂的特性,你想过度设计都难。
go引入了包管理机制,和java一样,这将方便程序员进行模块化开发。虽然,C语言资深玩家也能用c语言进行模块化系统设计,但对于一个新手来说,这无疑有一定的难度。而go语言引入的包机制则在语言层面为你提供了模块化编程的思想。
Python有一个tuple类型,这个类型的一个明显好处是让函数支持多返回值。一直很疑惑C/C++, java等传统语言一开始都不支持多返回值,难道真是紧跟数学模型y = f(x)的结果吗?如此优秀的特性,go语言当然没有放过,粗略的看了一下go项目中提供的库,发现多返回值的一个重要应用是让函数返回的计算结果和error分离。一个c函数经常做的事情是,返回值为正数就是真正需要的结果,如果为-1就是函数计算过程发生错误了;而java函数则是计算过程发生错误就向外抛出异常,终止计算。c和java都不够完美,c显得太弱了,java显得太臃肿了。异常机制真是一个非常土憋的技术,话说C++程序员就很少使用异常,而java程序员确是乐此不疲,结果就是代码嵌套层次惨不忍睹。
c语言程序员可能最痛苦的是内存管理问题,漏掉内存释放导致内存泄漏的c系统也时常发生。go既然是c的加强,因此就实现了gc,程序员再也不为内存泄漏而头大了。
除了这些语言级的优秀特性外,go最大的亮点还是它对并行程序的支持,c/java等语言都是通过线程来实现并行,语言本身不支持并行; 而Ada这门古老语言却早早就实现了语言级的并行了。go的并行化技术称为goroutine,因此go中没了线程的概念,这让程序员能够更加方便的正确的写出针对多核的程序。
最后附上雕梁在google+上说的一句话——“小的语言,大的库才是王道”。
有疑问加站长微信联系(非本文作者)