前言
2017.10,作为 Go 语言的三位创始人之一,Unix 老牌黑客
罗勃·派克(Rob Pike)
在新文章“
Go: Ten years and climbing
”中,回顾了一下 Go 语言的发展过程。其中提到,Go 语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言。还提到中国程序员对 Go 语言的热爱完全超出了他们的想象,甚至他们都不敢相信是真的。
Go 语言和 Docker 这两种技术已经成为新一代的云计算技术,而且可以看到其发展态势非常迅猛。而中国也成为了像美国一样在强力推动这两种技术的国家。这的确是一件让人感到非常高兴的事,因为中国在跟随时代潮流这件事上已经做得非常不错了。
- 对Go 语言的了解
第一,语言简单,上手快。Go 语言的语法特性简直是太简单了,简单到你几乎玩不出什么花招,直来直去的,学习曲线很低,上手非常快。
第二,并行和异步编程几乎无痛点。Go 语言的 Goroutine
和 Channel
这两个神器简直就是并发和异步编程
的巨大福音。像 C、C++、Java、Python 和 JavaScript 这些语言的并发和异步方式
太控制就比较复杂了,而且容易出错,而 Go 解决这个问题非常地优雅和流畅
,如下图。
(图片来自 Medium:Why should you learn Go?
)
第三,Go 语言的 lib 库麻雀虽小五脏俱全。Go 语言的 lib 库中基本上有绝大多数常用的库。
第四,C 语言的理念和 Python 的姿态。C 语言的理念是信任程序员,保持语言的小巧,不屏蔽底层且底层友好,关注语言的执行效率和性能。而 Python 的姿态是用尽量少的代码完成尽量多的事。于是我能够感觉到,Go 语言想要把 C 和 Python 统一起来,这是多棒的一件事啊。
(图片来自 Medium:Why should you learn Go?
)
所以,即便 Go 语言存在诸多的问题,比如垃圾回收、异常处理、泛型编程
等,但相较于上面这几个优势,我认为这些问题都是些小问题。于是就毫不犹豫地入坑了。
- 当然,一个技术能不能发展起来,关键还要看三点。
有没有一个比较好的社区
。像 C、C++、Java、Python 和 JavaScript 的生态圈都是非常丰富和火爆的。尤其是有很多商业机构参与的社区那就更为人气爆棚了,比如 Linux 的社区
。
有没有一个工业化的标准
。像 C、C++、Java 都是有标准化组织的。尤其是 Java,其在架构上还搞出了像 J2EE 这样的企业级标准。
有没有一个或多个杀手级应用
。C、C++ 和 Java 的杀手级应用不用多说了。
上述的这三点是非常关键的,新的技术只需要占到其中一到两点就已经很不错了
,何况有的技术,比如 Java,是三点全占到了,所以,Java 的发展是如此好。当然,除了上面这三点重要的,还有一些其它的影响因素,比如:
学习曲线是否低,上手是否快
。这点非常重要,C++ 在这点上越做越不好了。
有没有一个不错的提高开发效率的开发框架
。如:Java 的 Spring 框架,C++ 的 STL 等。
是否有一个或多个巨型的技术公司作为后盾
。如:Java 和 Linux 后面的 IBM、Sun……
有没有解决软件开发中的痛点
。如:Java 解决了 C 和 C++ 的内存管理问题。
用这些标尺来量一下 Go 语言,我们可以清楚地看到:
- Go 语言容易上手;
- Go 语言解决了并发编程和写底层应用开发效率的痛点;
- Go 语言有 Google 这个世界一流的技术公司在后面;
- Go 语言的杀手级应用是 Docker,而 Docker 的生态圈在这几年完全爆棚了。
所以,Go 语言的未来是不可限量的
。当然,个人觉得,Go 可能会吞食很多 C、C++、Java 的项目。不过,Go 语言所吞食主要的项目应该是中间层的项目,既不是非常底层也不会是业务层。
也就是说,Go 语言不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到高层如 Java 业务层的项目。Go 语言能吞食的一定是 PaaS 上的项目,比如一些消息缓存中间件
、服务发现 、服务代理
、控制系统
、Agent、日志收集
等等,没有复杂的业务场景,也到不了特别底层(如操作系统)的中间平台层的软件项目或工具。而 C 和 C++ 会被打到更底层,Java 会被打到更上层的业务层。这是我的一个判断。
关于 Docker ,这是云计算中 PaaS 的关键技术,虽然,这世上在出现 Docker 之前,几乎所有的要玩公有 PaaS 的公司和产品都玩不起来,比如:Google 的 GAE,国内的各种 XAE,如淘宝的 TAE,新浪的 SAE 等。但我还是想说,PaaS 是一个被世界或是被产业界严重低估的平台。
PaaS 层是承上启下的关键技术,任何一个不重视 PaaS 的公司,其技术架构都不可能让这家公司成长为一个大型的公司。因为 PaaS 层的技术主要能解决下面这些问题。
软件生产线的问题
。持续集成和持续发布,以及 DevOps 中的技术必需通过 PaaS。
分布式服务化的问题
。分布式服务化的服务高可用、服务编排、服务调度、服务发现、服务路由,以及分布式服务化的支撑技术完全是 PaaS 的菜。
提高服务的可用性 SLA
。提高服务可用性 SLA 所需要的分布式、高可用的技术架构和运维工具,也是 PaaS 层提供的。
软件能力的复用
。软件工程中的核心就是软件能力的复用,这一点也完美地体现在 PaaS 平台的技术上。
所以,Go 语和 Docker 作为 PaaS 平台的关键技术前途是无限的,我很庆幸赶上了这个潮流。