Go语言设计哲学

Go语言的编程哲学:少即是多,并行、组合、正交、非侵入式的接口。

设计软件有两种方法,一种是简单到没有明显缺陷,另一种是复杂到缺陷不那么明显,Go语言设计者明显选择的是前者。

少即是多:控制语言特性的数量、语言使用的复杂性。只提供一种方法做事情,把事情做到极致,是Go的设计思想之一,比如循环只提供一个for关键字等等。Go的开发者认为增加语言特性并不能保证开发效率的提升,复杂性的增加导致使用者容易犯错,而有些复杂的语言特性可以通过库等其他形式来辅助支持。

正交:正交是保证事物稳定性和简单性的最好设计。Go的很多特性比如goroutine、接口、类型系统等都是正交的,特性的组合提高了可用性,而并没有增加使用的复杂性。

并行:Go原生支持并发,更容易对原本就并行的世界进行建模。

组合:组合优于继承。继承关系只是万物各种关系的一个子集,只有组合才是世间万物最根本的,常见的关系,使用组合这种很自然的方式来建模世界,其表现力往往比以继承为基础的面向对象的语言更强。

非侵入式的接口:分层是计算机领域的一个重要指导思想,而接口是分层实现的一种重要战术手段。Go语言的接口采用的是一种Duck模型,具体类型不需要显式地声明自己实现了某个接口,只要其方法集是接口方法集的超集即可,判断类型是否实现接口完全交给编译器处理,从而将接口和实现者彻底解耦。这个特性使得Go程序迭代和重构更加容易。

设计模式并不是语言优秀带来的副产品,而是因为语言表现力不足而不得不依赖经验积累进行弥补。虽然Go在包管理、泛型支持和错误处理上还有很多不尽人意的地方,但是Go作为面向工程的实用主义者无疑具有巨大的潜力。