Why Go?

Gopher

在谷歌内部开发项目时,为了追求效率,大型服务器都是用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