在谷歌内部开发项目时,为了追求效率,大型服务器都是用C++开发的。但是开发过程中遇到了很多问题,随着对这些问题的思考,产生了Go语言,以解决这些问题为目标。
痛点:
- 编译过慢
- 头文件依赖混乱
- 语言的用法太灵活,人员使用方式不一致
- 代码难以理解
- 重复的工作
- 升级代价较大
- 版本复杂
- 构建自动解析工具困难
- 交叉语言编译困难
语言优势:
- 编译速度快
- 内建并发
- 提供垃圾回收功能
- 适合大型高可靠性软件(尤其是服务端程序)的开发
PS 几点经验:
- 头文件混乱对于大型系统确实麻烦,只能增加、不能删除,谁都不敢删,怕引起未知问题
- 编译速度慢和头文件依赖混乱也有关系,对于静态语言如果编译速度加快几十倍,确实能够极大的提高效率,不要总打断思路
- 文章中提到”encourages composition over inheritance”,这点与OOD的原则确实相符,”has a over is a”
- 关于并发的CSP(Communicating Sequential Processes)支持也值得期待,之前要做并发要么性能差(多线程阻塞)、要么逻辑复杂(多线程非阻塞),希望Go能很好的解决
- 垃圾回收可以降低开发难度也可以避免内存泄漏,但是不知道性能会下降多少,需要在使用中验证
参考:
https://golang.org/doc/faq
https://talks.golang.org/2012/splash.article