文章目录
前言
作者写这本书的目的
回答「Go入门容易,精进难,怎么才能像Go开发团队那样写出符合Go思维和语言惯例的高质量代码?」
作者的解答思路
- 思维层面:写出高质量Go代码的前提是思维方式的进阶,即用Go语言的思维写Go代码
- 实践技巧层面:Go标准库和优秀开源库是挖掘符合Go惯用法的高质量Go代码的宝库,对其进行阅读、整理和归纳,可以得到一些能够帮助我们快速进阶的有效实践。
1. Go语言的诞生
Rob Pike、Robert GriesemerKen Thompson三位巨佬在2007.9.20下午的一次大约一小时的C++构建编译等待过程中探讨萌芽的,目的是为了解决C++复杂性高、编译构建速度慢、不便支持并发等。
一天后三位大佬开启了具体设计的回忆,两天后发布邮件,五天后正式命名为Go,2009.10.30日Rob Pike在Google Tech talk上做了关于Go语言的演讲“The Go Programming Language”,Go语言正式公之于众。
想起了念书时历史课中的一个问题:是伟人创造了历史还是人民群众创造了历史?
2. Go语言的设计哲学
2.1 追求简单,少即是多
拒绝走语言特性融合的道路,而选择做减法。把负责留给自己,将简单易用留给gopher。
- 简介、常规的语法、仅25个关键字
- 内置垃圾手机,降低开发人员内存管理心智
- 没有子类型继承
- 首字母大小决定可见性
- 方法就是函数
- 接口只是方法集合
- 内置字符串、切片、map
- 内置支持并发
- …
2.2 偏好组合,正交解耦
Go语言本质上不属于经典OO语言范畴,不像C++、Java等主流OO语言通过庞大的自上而下的类型体系、继承、显式接口实现将程序的各个部分耦合起来,Go语言所遵从的设计哲学是组合。
隐式的interface让程序各个部分之间的耦合降到最低,自然地遵从了依赖抽象、里氏替换、接口隔离原则。
- 无类型体系,类型之间是独立的,没有子类型的概念
- 每个类型都可以有自己的方法集合,类型定义与方法实现是正交独立的
- 接口与其实现之间隐式关联
- 包之间是相对独立的,没有子包的概念
2.3 原生并发,轻量高效
- Go语言采用轻量级协程并发模型
- Go语言为开发者提供支持并发的语法元素和机制
2.4 面向工程,自带电池
面向真实世界中Google内部大规模软件开发的存在的各种问题,为这些问题提供答案。
- 程序构建慢
- 失控的依赖管理
- 开发人员使用编程语言的不同子集
- 代码可理解性差
3. 使用Go语言原生编程思维来写Go代码
萨丕尔-沃夫假说:语言影响或决定人类的思维方式。