初次见面Go语言,请多关照

这是Go语言的第一篇文章,会持续发布它的系列文章,一篇篇慢慢来。

Go语言的作者是Robert Griesemer、Rob Pike和Ken Thompson,其中Ken Thompson在UNIX和C语言开发中的巨大贡献为程序员所熟知。

目前为止有哪些软件是用Go语言编写的呢?容器软件Docker、基础软件ETCD和Kubernetes,数据库软件TiDB和InfluxDB、消息系统NSQ、缓存组件GroupCache。可以看到,几乎在基础架构软件的每一个领域,都涌现了由Go语言编写的新软件,这些软件的市场占有率持续攀高。除了作为基础架构软件的语言之外,Go语言作为服务器端通用语言的机会也越来越多,者从Beego、Gorilla等Go语言Web框架的热门程度也可以看出一些发展趋势。

基础架构软件这个层面,最早只有C语言,后来又有了C++语言。在性能不受影响的情况下,C++语言让我们可以驾驭规模更大、更复杂的项目,但是它并没有太好地解决代码的易用性和健壮性这两个方面互相平衡的问题,所以我们看到了很多用Java语言编写的基础架构软件,例如整个Hadoop生态。在这之后,随着高并发需求的逐步增强,不少针对高并发设计的语言流行起来,例如Erlang(代表作RabbitMQ)、Scala(代表作Apache Spark)、Rust等等,也永远不会停止创新的步伐。

Go和C从表面上看起来很相似,而且和C一样,也是专业程序员使用的一种工具。但是Go远不止是C语言的一种升级版本,它基于多种其它语言,取其精华去其糟粕。Go语言实现并发功能的设施是全新的、高效的,实现了更灵活的数据抽象和面向对象的途径,实现了自动化的内存管理(垃圾回收)机制。

Go语言继承了C语言的表达式语法、控制流语句、基本数据类型、按值调用的形参传递和指针,但比这些更重要的是,继承了C语言所强调的要点:程序要编译成高效的机器码,并自然地与所处的OS提供的抽象机制相配合。

Go语言不仅仅是受到了C语言的影响,它的参考覆盖面很广,诸如通信顺序进程(Communication Sequential Process,简称CSP,贝尔实验室的Tony Hoare提出)、Newsqueak(一种具有垃圾回收功能的函数式语言,具有类C的语句和表达式语法)、Module-2(Pascal语言的一个分支,提出了包的概念)、Oberon(消除了模块接口文件和模块实现文件之间的差异)。

综上所述,每一门新的语言的出现都是有原因的,一般来说是两大原因:

1. 出现了当前主流语言无法解决的复杂场景或具体问题;

2. 需要性价比更高的语言。

我想,除了贝尔实验室会做一些完全出于个人情怀的东西以外,没有哪家会随便布局无出路的新技术吧。正如Rob Pike所说,“复杂性是以乘积方式增长的”,为了解决某个问题,一点点地将系统的某个部分变得更加复杂,不可避免地也给其他部分增加了复杂性。在不断要求增加系统功能、选项和配置,以及快速发布的压力之下,简单性往往被忽视了。要实现简单性,就要求在项目的一开始就浓缩思想的本质,并在项目的整个生命周期制定更具体的准则,以分辨出哪些变化是好的,哪些是坏的或致命的。只要足够努力,好的变化就既可以实现目的,又能够不损害Fred Brooks所谓软件设计上的“概念完整性”。坏的变化就做不到这一点,致命的变化则会牺牲简单性而换取方便性。但是,只有通过设计上的简单性,系统才能在增长过程中保持稳定、安全和自洽。Go语言不仅包括语言本身及其工具和标准库,也保持了极端简单性的行为文化。

发个小广告!!!走过路过,不要错过!新书来啦!!!

注:本公众号与当当店铺并无从属关系,仅为大家提供一个便捷购物地址。若有所冲突,纯属巧合,立删。

麦克叔叔每晚十点说

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180223B16H8T00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券