技术开发 频道

七大利弊帮你分析Go语言的可用性

  【IT168 评论】2016年是充满惊喜的一年,根据Tiobe报告显示,Go语言在这一年中的占有率从0.161%一度跃升至2.001%,排名也从历史最低的122位上升到了13位(2016年11月),这意味着Go从一个利基工具正式走入了真正的程序设计语言的行列。

  Go语言之所以可以实现这么大的飞跃,很大一部分原因可能是Docker。近些年,一些热门技术的特征之一就是开发语言的活力。反过来想,其实Docker的成功也为Go语言的发展提供了坚实的基础。

  前几天,我们在网路上看到了一些关于C语言衰落的言论,笔者认为C语言的衰落与Go语言的崛起是有一定相关性的。虽然目前C语言在Tiobe排名还处在第二,但据Tiobe计算C语言已经失去了大约40%的程序员的支持。Go语言和C语言都是用于编写底层代码的精简高效语言,两者之间有很多共享的功能,其中包括大多数的语法,如继承、重载、对象等。所以我们不难推断出Go语言的很多新支持者可能是从C语言阵营过来的。

  TIOBE排行榜并不能说明一门编程语言的好坏,但它的指数是基于世界范围内的资深软件工程师和第三方供应商提供的,所以它在一定程度上反映了编程语言的热门与否。根据Go语言的上升势头,不难看出Go语言已成热门趋势,下面我们就介绍它的七大优劣势,帮助企业更好的选用Go语言。

七大利弊帮你分析Go语言的可用性

  1.优势:简单

  谈到Go语言大家的第一反应可能就是简单,当然这也是Go语言的一大优势,一个有经验的程序员一个晚上就可以掌握,而其他新语言如Swift它的相关文档就得有几百页厚。

  简单带来的另一个优点就是更易于阅读,Go语言规范,有其他语言基础的程序员也能迅速上手,由于学习曲线平缓,团队之间的差距更小,更利于合作,另外Go 自带完善的工具链,大大提高了团队协作的一致性。

  劣势:简陋

  当然,在晚上学习一门语言是很好的,但Go是舍弃了很多现代抽象的功能才实现了简单性,舍弃了这些功能也就意味着你不能依靠更复杂语言的力量来对抗Bug。所以对于复杂性和抽象的爱好者来说,Go语言不是进步反而是倒退。

  除此之外,每个程序员都有自己的编程想法,有的人想要泛型,有的人想要可扩展性......但Go语言的使用往往会让程序员有一种绑住手脚的感觉,无法大展拳脚。

  2.优势:自动化节省时间

  Go集成了很多方便快捷的功能,如自动声明变量,它看起来是一个很小的功能,但是却为程序员带来了很多便利,毕竟没有人希望一直在写“int”吧。另外,Go语言的GC机制也是一个很大的优势,因为每个人都对malloc和free函数感到厌烦了吧。

  劣势:自动化可能是危险的

  相信每个程序员都对编程语言的自动化的缺点感同身受:如果你采用GC机制来自动回收内存,那么可能会在错误的时间被触发;自动声明可能会导致嵌套作用域中使用相同的变量名,从而导致错误;另外,现在人们对于数据管理系统更加谨慎,所以自动化对我们来说可能不是优势反而是劣势。

  3.优势:无虚拟机

  在过去的几十年里,基于虚拟机的语言都是爆款,二进制代码可以在不同的芯片架构之间轻松移动,而且虚拟机在执行优化时可以实施一些安全规则,所以在VM中整合了很多好的想法。

  但是启动虚拟机需要一些时间,但是Go语言就不用担心这一点,它可直接编译成机器码,除了glibc外没有其他外部依赖,部署十分方便。这使得Go语言在开发和调试过程中的速度都非常快。

  劣势:无虚拟机

  Go语言有独立的二进制文件,但是它们内存占用都非常大,例如你写一个“hello world”的示例,它就接近于2MB。二进制文件之所以会这么大,有一部分原因是它需要执行虚拟机的大部分功能,。

  针对这一问题,Go 1.7做了一些努力,减少了编译器所使用的内存量并且在连接时间方面也有所提升,据悉,相对于Go 1.5.3它能够将总的编译时间降低大约20-30%。虽然这一变化让问题改善了很多,但是当服务器打开了数百个代码版本时,RAM仍会被阻塞。

  4.优势:与C类似

  Go语言带有强大的C基因,所以在支持底层代码方面毫无压力,1.5版本中完成的并发GC使得Go语言程序在响应时间方面有了质的飞跃,在软件开发效率和运行效率之间做出了较好的权衡。

  劣势:与C类似

  类C语言有很多,从显而易见的C#,C ++和Objective-C到Java、Rust、Swift,它们涵盖了很多有趣的功能,如果你想要完成一个项目,你可以很多选择,Go语言并不是唯一。

  5.优势:无回调语法

  许多程序员都从Node.js的深坑跳到Go,为什么呢?因为他们之前要做很多回调。回调结构对于Web页面上的JavaScript代码来说是很有意义的,它有助于通过Node提供服务器端开发的速度,但是它很难保持直线,尤其是在有三四层嵌套的情况下。

  劣势:无回调语法

  使用Go语言你不需要考虑嵌套方法,但是你仍然需要考虑以相同的方式编码交互。Node.js的嵌套虽然有些烦人,但是它能够让你在大脑中清晰的形成一个架构图,而Go语言由于不需要考虑嵌套,所以很有可能会出现失误。

  6.优势:逐渐丰富的库

  Google为用户创建服务器应用程序提供很多重要的库,尤其是网络库非常强大。

  劣势:库缺乏

  这个咋一听来好像是自行矛盾,但其实也很好理解,虽然Google对于Go语言给予了大量的支持,但毕竟Go语言还很年轻,所以标准库少也是在所难免的。JAR是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件,使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。Clojure,Scala,JRuby,Kotlin和许多其他的新语言被编译为JVM的字节码,它们可以与所有Java库一起使用。

  7.优势:前景可期

  Go语言之所以能够飞速发展,很大一部分原因是Google的支持。Google是一家重视未来的公司,我们可以从一些蛛丝马迹中发现与谷歌阅读器相比,Google似乎更致力于Go语言,目前Google在无人驾驶汽车和其它新奇特的东西投入了大量的精力,这也为Go语言的发展提供了助力。

  劣势:在利基范围之外未能完全实践承诺

  Go语言的上升令人印象深刻,但是能否继续上升,我们可能要打一个问号。企业对于代码的要求除了效率,还有稳定,要让企业将项目的未来从现有的语言突然变向押宝在另一种语言上,似乎不太可能。另外,Google对于Go语言的支持是优势也是掣肘,一旦Google风向有变,放弃Go语言转向一个更好的版本,那么对Go语言来说可能是灭顶之灾。

  Java是AP计算机科学语言,C是Unix语言,Python更受社会科学家青睐,PHP非但没有死亡,反而越来愈好......每一种语言都有自己的使用场景,并且在自己的领域发展很好,如果Go语言不能尽快找好自己的定位,那么未来的发展可能会有影响。

0
相关文章