解密为何 Go 能从众多语言中脱颖而出
技术的突飞猛进,推动着世界上许多突破性的发现。Golang ,作为如此革命性的发明,早已征服了整个世界。
当我们接触到 Golang 后,开发领域中已经发现了很多种(用 Golang)带来进步和革新的方法。在语言的万马千军纷纷争奇斗艳时,Golang 早已证明了自己才是最大的游戏规则改变者。
虽然对于初学者来说,这种新生的语言可能有一点点复杂和难以掌握,但是当你做了充足的练习后,你会很容易地处理 Golang 语言。
在(开发者)熟识关于 Golang 的一些基础知识之前,他们往往就已经被这种高级编程语言逼疯了。好了,闲话少说,我们一起来研究下这篇博客摘录。
Golang -- 无限可能
你能相信在过去的几年中 Golang 的受欢迎度像飞火流星一样如此飙升吗?作为一种领先业界的结果导向的编程语言,Golang 已风靡全球,事实如此。
虽然几门其他的语言如 C, Java 仍在统治编程领域,但是一些能为现代计算带来更好结果的新模型也被引入了,尤其是在云计算中。
Go 之所以越来越受欢迎,主要归功于的它的轻量,还有它完美适配几乎所有的微服务架构。容器宠儿 Docker 和 Google 的 k8s 也使用了 Go 。
除了如此不可思议的受欢迎外,Go 凭借它(相对其他语言)有利的特性在数据科学领域也站稳了脚跟,Go 的这些功能正是数据科学所需要的,用(这些功能)来(为数据科学)带来更好的效果。
作为一种高级编程语言,Go 可以在多个方面方便开发者,诸如原生的并发,垃圾回收机制,等等。使用 Go 语言时,开发者不需要再依赖自己减少通过编码解决内存泄露等问题的必要的能力。Golang 的一些其他特性,可以恰到好处地适配解决数据科学和微服务架构的问题。
因为前面提到的这些特性,全球越来越多初创公司开始使用 Go 语言。Go 语言中包含了一套 Tensorflow 的 API ,还有一些项目如 Pachyderm 是用 Go 语言精心打造的。
Cloud Foundry 中也有一连串的零部件是用 Golang 写的。有趣的是,这份列表定期添加用 Go 语言写的不同(项目)名字。
Golang 为何无可替代?
Golang 开始为开发领域带来进步和缓和一些顽固问题的历史并不长。在追求为新世纪的开发者们提供一个统一和无缝体验的过程中,Golang 毫无疑问地已经一步步为自己开创了一片天地。
但是,Golang 真的名副其实吗?Golang 真的无可替代?它真的有资格坐头把交椅?我们一探究竟。
极简是 Golang 的杀手锏
极简是无与伦比的,Golang 毫无疑问已经把它发挥到了极致。很多表现很成功的语言像 Rust 、Scala 等都有很复杂的特性。而且,它们提供了先进的内存管理和类型系统,在开发领域表现得很优秀。这些语言也曾像 C# 、C++ ,一时成为主流语言,发挥了它们全部的能量。
Golang 走了一条稍微有些不同的路线:合情合理地摒弃了很多此类(上述)特性。下面列出了 Go 摒弃的几个特性和能力。
没有泛型
泛型和模板是不同编程语言区分于彼此的重要体现。加入与错误信息关联的复杂的泛型,往往让语言变得晦涩难懂。Go 的设计者们,抛弃了这部分,使得 Go 语言变得更简单。无疑,它虽然有争议但仍是个明智的设计。
一个可执行文件就够了
Golang 中确实没有与可执行文件隔离的运行库。能生成一个通过复制就可以轻易部署的的二进制文件是一项不错的能力。版本不匹配或依赖问题出现的风险被消除,要感谢 Golang 的这个特性。此外,这个特性也是基于容器开发的工程的巨大福音。
没有动态库
Golang 在 1.8 版本作了微调,现在开发者们可以通过插件包来加载动态库。但是因为这个特性并不是安装 Go 时自带的,所以它仍然只是为某些特定的功能而存在的扩展。
Go 之所以流行,协程功不可没
从一个非常务实的角度看,Go 的协程是最有魅力的几个方面之一。专家们通过 Go 协程可以轻易(在单核机器上)实现出多核机器的能力。
CSP
C. A. R. 是 Golang 并发模型的原型。最初的想法是,规避掉所有的在劳动密集型和容易出错的多个运行线程间共享内存的同步问题。
协程同步
另一个等待协程停止的有效的方法是使用同步组。你可以声明一个等待组的对象,随后在每一个可以正常调用它的 Done() 函数的协程在完全停止时把声明的对象传给它。
channel
Go 协程通过 channel 可以轻松地实现互相访问信息。你可以创建一个 channel 变量后把它传递给协程。使用者既可以从 channel 接收数据,又可以向 channel 发送数据。
无缝处理错误
Golang 中处理错误的概念是(与其他语言)完全不同的。即使是普通的函数,也能顺利地返回一个错误作为它的最终返回值。你即便不能在协程中返回一个错误,也可以通过其他的方式让错误逃逸到协程外的作用域。
把一个内含数据是 error 类型的 channel 传给一个协程无疑是一次很好的实践。使用者也可以使用 Golang 把错误写到数据库、log 文件或请求远程服务。
结语
由于技术的突飞猛进,软件部署以及交付的概念已经发生了很大的变化。微服务架构在敏捷开发中扮演了一个关键的角色。绝大部分新生的应用是按照云原生且可以利用云平台提供的多种云服务这个思路设计的。
世界上有很多种编程语言,每种语言都有它独一无二的特性。但是,作为一种完美无瑕的工程语言,Golang 的设计方式使其可以满足新的要求。Golang 是为云而写的,由于其构建和对并行操作的掌控而获得了很大的欢迎。
过去的几年中,Go 见证了自己受欢迎度的一路高歌,尤其是在现代数据库方面。虽然 Go 如此风靡一时的很大一部分原因是跟谷歌的支持有关,但它在开发领域中独一无二的方式才是让它驰名中外最关键的因素。