Go语言学习笔记1——认识

来源:互联网 发布:mac怎么取消双系统 编辑:程序博客网 时间:2024/06/06 18:03
        go是一门编译型语言,而不是基于虚拟机的解释型语言,不谈编译和解释的性能问题,只是主观情感上觉得编译而产生的可执行程序与操作系统之间浑然天成。就好比戴套与不戴套的问题。go除了编译型和C语言神似以外,还有着很多的共同点,都说go就是c的加强版,因此我觉得go应该会受到很多c语言程序员的青睐,至少我是没hold住了。python是我认为和c一样简洁优雅的语言,可惜我实在不喜欢动态类型,坏处就不多说了; go号称有着python的开发效率,但却采用了和c一样的静态强类型,并且不支持类型强制转换,不亏是c语言的加强,安全性在语言层面终于进行了严格的保证。

       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+上说的一句话——“小的语言,大的库才是王道”。




原创粉丝点击