语法简单
抛开语法样式不谈,单就类型和规则而言,Go与C99、C11相似之处颇多,这也是我能接受它被冠以“NextC”名号的重要原因。
即便我是个坚定的C拥趸,也不得不承认,它处于简单和复杂的两极。C简单到你每写下一行代码,都能在脑中想象出编译后的模样,指令如何执行,内存如何分配,等等。而C的复杂在于,它有太多隐晦而不着边际的规则,着实让人头疼。相比较而言,Go从零开始,没有历史包袱,在汲取众多经验教训后,可从头规划一个规则严谨、条理简单的世界。
人们习惯拿关键字和控制语句的数量来作为Go简单的例证,我倒觉着这并不合适。诚然,更少的语言规则有助于入门学习,这无可厚非。但更重要的在于,语言规则严谨,没有歧义,更没什么黑魔法变异用法。任何人写出的代码都基本一致,这才是简单的本质。放弃部分“灵活”和“自由”,换来更好的维护性,我觉得是值得的。
将“++”、“–”从运算符降级为语句,保留指针,但默认阻止指针运算。初时的不习惯,并不能掩盖它们带来的长期的好处。还有,将切片和字典作为内置类型,从运行时的层面进行优化,这也算是一种“简单”。
并发模型
时至今日,并发编程已成为程序员的基本技能,在各个技术社区都能看到诸多与之相关的讨论主题。究竟哪种方式是最佳并发编程体验,或许会一直争论下去。但Go却一反常态做了件极大胆的事,从根子上将一切都并发化,运行时用Goroutine运行所有的一切,包括main.main入口函数。
可以说,G