上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2 简单不意味着容易
简单和容易之间还是有一些不同的。简单,在技术中意味着学习或理解起来不复杂。而容易意味着我们不需要花太大成本就可以完成任何事情。Go 语言学起来简单,但是掌握起来不容易。
以并发为例,在2019年,一篇专注于并发错误的论文发布了——“Understanding Real-World Concurrency Bugs in Go”。[1]这篇论文是第一篇对并发错误进行系统研究的文章。文章中研究了多个用Go编写的代码库,比如,Docker、gRPC和Kubernetes。这篇文章最主要的观点之一是,尽管人们认为消息传递比共享内存更容易处理,但绝大多数阻塞问题都是由于错误使用channel造成的。
对于这样的结论你有什么反应呢?是否会认为语言设计者使用消息传递的方式是错误的呢?是否应该重新考虑在项目中如何处理并发问题呢?并不是。
这并不是要在消息传递和共享内存之间决定谁是更优解的问题。而是我们作为 Go 开发者,应该深入了解如何使用并发,现代处理器对并发的影响,什么时候应该使用何种并发方案及如何避免出错。举这个例子是想说,尽管goroutine和channel的概念学起来比较简单,但是在实践中并不简单。
这个主旨——简单不意味着容易,不仅仅是说并发,还可以推广到Go语言的方方面面。因此,想要成为一个Go 语言开发高手,我们需要花费时间、努力,通过从错误中学习来对这门语言的各个方面做深入了解。
本书的目标是通过深入研究100个Go语言错误来帮助读者加速掌握Go语言。