很多次别人问我为什么最终选择了golang, 我支支吾吾都没有讲清楚。 经过反复的思考才有了这篇文章。
ps: 文中各个语言的对比,只是基于我对这几门语言的浅显的认知。有不对的地方,还请指正。

程序员主要职责是使用计算机发现和解决问题。编程可以充分发挥计算机的优势。
编程语言因为需要解决的问题域不同,设计时没办法全面俱到,面对特定的问题域还需要使用不同的编程语言。
我给自己定的发展方向是在服务端开发、devops、云计算。
所以我挑选适合自己的编程语言的时候,需要考虑我的发展方向。golang正和符合我的需求。
和golang能同台竞技的有C++、Java、Python、Ruby等语言。我学过c++、java、python。
学习和使用了一段时间后,只有golang能最大程度帮助我解决问题。

编程语言只是我们程序员解决问题的工具。挑选好用的,简单的,适合自己的工具是理所应当的。

C++ -> Java

C++语法全面、复杂。很适合新手程序员的入门。大学最明智的就是将c++作为编程入门的语言(当然也提高了入门的门槛)。
互联网的快速发展,对业务迭代速度有了更高的要求。业内也普遍使用java作为服务端的主流开发语言。
于是我在大二的时候,抛弃了C++, 转而使用java来写服务端代码。java和C++相比,语法少了很多,也不需要操心垃圾回收。
有了jvm, java的程序能做到带有折扣的“一次编写,到处运行”。 在java中接触了interface这个概念。 之前的面向对象编程思想,开始朝面向接口编程转变。

Java -> Python

大二下学期的时候,接触到了脚本语言这个概念。当时百思不得其解,不明白什么是脚本,什么是脚本语言。于是自学了Python。
初步接触Python的时候,自然是被Python的设计哲学(优雅、明确、简单)所折服。纵观编程语言的发展,从机器语言、汇编语言、高高级语言。都是在朝人类能读懂的方向发展。所以Python以人为本的设计符合了这个发展规律。想比较于Java不够优雅的解决方式,Python显然更加高效。

Java -> Golang

大三的时候,对Python和脚本语言了解的足够深入了。发现脚本语言的特点。解释执行的特点,天生比不上编译执行的速度。Python也是是脚本语言,而服务端的要面临的问题,很多是性能的问题。所以我要向彻底抛弃Java, 还需要一门高性能的语言来解决高并发的问题。 这个时候恰好也接触到了docker。 知道了还有门语言叫做Golang。学习一门语言。出发点总是这门语言的优点。网上了解了下,Golang天生支持高并发。 当时虽然不是特别懂,但是听起来就很酷的语言,自然要先学会。

Python -> Golang

实习两个月+目前工作了一年。对golang的了解和理解也越来越深。一是因为缺乏Python的使用环境,二是发现人的精力有限。最终决定暂时抛弃了Python。 golang的应用面很广,Python能做的,Golang也能做。Golang是静态编译的程序,和java的动态编译,Python的解释执行不同。 打出的二进制包发给目标机器就能运行。不要提前安装jvm,python解释器。需要脚本语言的时候,使用shell也就足够了,不太需要使用python了。shell+golang就可以解决我面临的所有问题了。再使用Python显得有些多余。

golang优点

golang把语言的特性设计的尽可能正交,相互之间不要有关联,对多态的支持交给接口去处理,类型的存储尽量简单、平坦、直接。
没有一味的面向对象设计。使用组合的思想来建模世界,解决问题。

  1. 语言特性简洁,正交。
  2. 原生支持高并发。
  3. 组合优于继承
  4. 非侵入式接口,Duck类型使接口和实现者解耦。
golang缺点

包管理方式。
泛型支持。
错误处理。简单有效但不优雅。