Golang 真的好用吗?
要如何评价一门编程语言好不好用呢?我觉得要从语言设计和项目实践这两个角度来评价。
Golang 的设计追求极致的简洁。在 Golang 创始人 Rob Pike 向另外两位创始人发送的邮件中提到, Golang 被起名为“go”的原因,就是 go 这个单词很简单,方便用键盘输入,并且 Golang 配套的工具的命名也可以很简单。不仅如此,我们可以看到,C 语言有 37 个关键字,C++ 有 84 个,Golang 仅仅有 25 个。精益求精的关键字让学习和使用的负担减少了很多。
大部分语言在并发和异步编程上都比较麻烦,而 Golang 的 Goroutine 和 Channel 则是处理并发和异步的两个神器。方法返回多返回值的设计使用起来也很方便。很多人在学习 Golang 时,都能够在几天内上手,并开发出一个性能很不错的工具。
因为 Golang 语法简单,并发和异步编程简单,所以它是一门易学易用、并发和异步编程无痛点的语言。也就是说,从语言设计的层面,Golang 是好用的。
放眼市面上有不少编程语言饱受赞誉,但却很少甚至没有人使用它来开发项目。所以语言层面上的好用,也不代表它在实际的开发工作上也好用。下面我们在项目实践的层面上看看 Golang 的情况如何。
随着 Golang 的不断发展,现在已经有了很多应用使用 Golang 来进行开发,其中就包括如今已经大名鼎鼎的 Docker 和 Kubernetes。随着 Docker 和 Kubernetes 的成熟,又有越来越多的项目基于它们开发、部署和运维。如今 Kubernetes 已经成为了服务编排事实上的标准,在云端大量使用 Docker 和 Kubernetes 的现状,使 Golang 被称为云计算新一代的开发语言。
在大型项目中,使用微服务是大趋势。项目上云,把服务打包成一个个 Docker 镜像,使用 Kubernetes 来管理部署,是现在流行的玩法。微服务中的“服务”可以使用很多技术来开发,比如传统的 Java,新兴的开源跨平台框架 .NET Core 等等。当然使用 Golang 也可以,相对于其他技术,使用 Golang 开发的服务有一个巨大的优势:同样的功能,使用 Golang 开发,打包出来的镜像是最小的。
假如有一个简单的服务,使用 Java 开发,打包出来的 Docker 镜像大小可能在 700 MB 左右;使用 .NET Core 开发,打包出的 Docker 镜像大小可能在 200 MB 左右。也有一些缩减镜像大小的技术和工具,可以使 Java 的镜像减少到 100 MB,使.NET Core 的镜像减少到 60 MB。虽然看起来已经足够小了,但是如果使用 Golang 开发,打包出的镜像大小可能只有7 MB。
由于每次服务升级的时候都要把新镜像拉取到本地,这样带来的好处就是,Golang 镜像在传输和存储上的开销可能比其他镜像节省十倍到百倍。
强烈的对比。
也许你觉得,只不过是几十 MB,几百 MB 的差距而已,又不是当年硬件吃紧不得不省着用的时代,毛毛雨啦。首先,公司要赚钱,无非就是开源节流,不必要的浪费应该能省则省。其次,如果一个服务的镜像同时运行在几十个、几百个容器中,并且有几十个、几百个服务同时运行,那么在传输和储存上的开销差距就变得非常大了。
反正我认为 Golang 上手简单、功能强大,并且在云计算中节省资源,是一门好用的语言。
编辑|程文博
版权声明: 本文为 InfoQ 作者【极客时间】的原创文章。
原文链接:【http://xie.infoq.cn/article/f78c4c686f4c66eed12fb4456】。未经作者许可,禁止转载。
评论