go语言借鉴了哪些语言

2023-02-09,

go语言借鉴了C、Pascal和CSP。Go的很多语言特性借鉴与它的三个祖先:C、Pascal和CSP。Go的语法、数据类型、控制流等继承于C;Go的包、面对对象等思想来源于Pascal分支;而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支。

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

一、Go语言设计初衷

1、设计Go语言是为了解决当时Google开发遇到的问题:

  • 大量的C++代码,同时又引入了Java和Python
  • 成千上万的工程师
  • 数以万计行的代码
  • 分布式的编译系统
  • 数百万的服务器

2、Google开发中的痛点:

  • 编译慢
  • 失控的依赖
  • 每个工程师只是用了一个语言里面的一部分
  • 程序难以维护(可读性差、文档不清晰等)
  • 更新的花费越来越长
  • 交叉编译困难

3、如何解决当前的问题和痛点?

Go希望成为互联网时代的C语言。多数系统级语言(包括Java和C#)的根本编程哲学来源于C++,将C++的面向对象进一步发扬光大。但是Go语言的设计者却有不同的看法,他们认为值得学习的是C语言。C语 言经久不衰的根源是它足够简单。因此,Go语言也是足够简单。

所以,他们当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它 还是为了让我们的编程变得更舒适和方便。

但是结合Google当时内部的一些现实情况,如很多工程师都是C系的,所以新设计的语言一定要易学习,最好是类似C的语言;20年没有出新的语言了,所以新设计的语言必须是现代化的(例如内置GC)等情 况。最后根据实战经验,他们向着目标设计了Go这个语言。

4、Go语言的特色:

  • 没有继承多态的面向对象
  • 强一致类型
  • interface不需要显式声明(Duck Typing)
  • 没有异常处理(Error is value)
  • 基于首字母的可访问特性
  • 不用的import或者变量引起编译错误
  • 完整而卓越的标准库包
  • Go内置runtime(作用是性能监控、垃圾回收等)

二、Go语言的优势

1、学习曲线容易

Go语言语法简单,包含了类C语法。因为Go语言容易学习,所以一个普通的大学生花几个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内Go流行的原因之一。

Go 语言的语法特性简直是太简单了,简单到你几乎玩不出什么花招,直来直去的,学习曲线很低,上手非常快。

2、效率:快速的编译时间,开发效率和运行效率高

开发过程中相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。Go拥有接近C的运行效率和接近PHP的开发效率。

C 语言的理念是信任程序员,保持语言的小巧,不屏蔽底层且底层友好,关注语言的执行效率和性能。而 Python 的姿态是用尽量少的代码完成尽量多的事。于是我能够感觉到,Go 语言想要把 C 和 Python 统一起 来,这是多棒的一件事啊。

3、出身名门、血统纯正

之所以说Go出身名门,从Go语言的创造者就可见端倪,Go语言绝对血统纯正。其次Go语言出自Google公司,Google在业界的知名度和实力自然不用多说。Google公司聚集了一批牛人,在各种编程语言称雄争霸的 局面下推出新的编程语言,自然有它的战略考虑。而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途。

4、自由高效:组合的思想、无侵入式的接口

Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程、面向接口编程、函数式编程。程序员们可以各取所需、自由组合、想 怎么玩就怎么玩。

5、强大的标准库

这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。**Go 语言的 lib 库麻雀虽小五脏俱全。**Go 语言的 lib 库中基本上有 绝大多数常用的库,虽然有些库还不是很好,但我觉得不是问题,因为我相信在未来的发展中会把这些问题解决掉。

6、部署方便:二进制文件,Copy部署

这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。

7、简单的并发

**并行和异步编程几乎无痛点。**Go 语言的 Goroutine 和 Channel 这两个神器简直就是并发和异步编程的巨大福音。像 C、C++、Java、Python 和 JavaScript 这些语言的并发和异步方式太控制就比较复杂了,而且 容易出错,而 Go 解决这个问题非常地优雅和流畅。这对于编程多年受尽并发和异步折磨的编程者来说,完全就是让人眼前一亮的感觉。Go 是一种非常高效的语言,高度支持并发性。Go是为大数据、微服务、并发而生的一种编程语言。

Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级 方法,而通道是 goroutines 之间通信的优先方式。

创建 Goroutines 的成本很低,只需几千个字节的额外内存,正由于此,才使得同时运行数百个甚至数千个 goroutines 成为可能。可以借助通道实现 goroutines 之间的通信。Goroutines 以及基于通道的并发性 方法使其非常容易使用所有可用的 CPU 内核,并处理并发的 IO。相较于 Python/Java,在一个 goroutine 上运行一个函数需要最小的代码。

8、稳定性

Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等 等)的各个环节的工具,如go tool、gofmt、go test。

三、对比其他语言

Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP。Go的语法、数据类型、控制流等继承于C,Go的包、面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于 CSP分支。

Java

编译语言,速度适中(2.67s),目前的大型网站都是拿java写的,比如淘宝、京东等。主要特点是稳定,开源性好,具有自己的一套编写规范,开发效率适中,目前最主流的语言。 作为编程语言中的大腕。具有最大的知名度和用户群。无论风起云涌,我自巍然不动。他强任他强,清风拂山岗;他横由他横,明月照大江。

c#

执行速度快(4.28),学习难度适中,开发速度适中。但是由于c#存在很多缺点,京东、携程等大型网站前身都是用c#开发的,但是现在都迁移到了java上。

C/C++

现存编程语言中的老祖,其他语言皆由此而生。执行速度最快无人能及。但是写起来最为复杂,开发难度大。

Javascript

编程语言中特立独行的傲娇美女。前端处理能力是其它语言无法比拟。发展中的js后端处理能力也是卓越不凡。前后端通吃,舍我其谁?

Python

脚本语言,速度最慢(258s),代码简洁、学习进度短,开发速度快。豆瓣就是拿python写的。Python著名的服务器框架有django,flask。但是python在大型项目上不太稳定,因此有些用python的企业后来迁移到 了java上。

scala

编译语言,比python快十倍,和java差不多,但是学习进度慢,而且在实际编程中,如果对语言不够精通,很容易造成性能严重下降。后来比如Yammer就从scala迁移到了java上。微服务框架有lagom等。

Go

编程界的小鲜肉。高并发能力无人能及。即具有像Python一样的简洁代码、开发速度,又具有C语言一样的执行效率,优势突出。

在软件行业做过一段时间的人都知道,没有万能的编程语言,也没有万能开发框架,更没有万能的解决方案。任何新技术的产生都应该归功于一部分人对老旧技术的强烈不满。Go语言也不例外。比如,C语言的依赖管理、C++ 的 垃圾回收、Java 笨重的类型系统和厚重的 Java EE 规范,以及脚本语言(如 PHP、Python 和 Ruby)的性能,这些都是很多开发者社区经常争论和抱怨的问题。

扩展知识:

Go语言的优势

Go语言是集多编程范式之大成者,体现了优秀的软件工程思想和原则,其特性可以使开发者快速地开发、测试和部署程序,大大提高了生产效率。下面我们来看看与其他主流语言相比,Go语言具有的优势。

1) 相对于 C/C++ 来讲,Go语言拥有清晰的依赖管理和全自动的垃圾回收机制,因此其代码量大大降低,开发效率大大提高。

2) 相对于 Java 来讲,Go语言拥有简明的类型系统、函数式编程范式和先进的并发编程模型。因此其代码块更小更简洁、可重用性更高,并可在多核计算环境下更快地运行。

3) 对于 PHP 来讲,Go语言更具通用性和规范性。这使得其更适合构建大型的软件,并能够更好地将各个模块组织在一起。在性能方面,PHP 不可与 Go 同日而语。

4) 对于 Python/Ruby 来讲,Go 的优势在于其简洁的语法、非侵入式和扁平化的类型系统和浑然天成的多范式编程模型。与 PHP 一样,Python 和 Ruby 也是动态类型的解释型语言,这就意味着它们的运行速度会比静态类型的 编译型语言慢很多。

总而言之,Go语言对于当前大多数主流语言来讲,最大的优势在于具有较高的生产效率、先进的依赖管理和类型系统,以及原生的并发计算支持。因此,Go语言自发布以来就受到了各个领域开发者的关注和青睐。

Go语言的劣势

下面,我们来客观地看一下目前Go语言需要加强或改进的地方(虽然有些 Gopher 并不这么认为)。

1) 从分布式计算的角度来看,Go语言的成熟度不及 Erlang(现在已经出现了一些这方面的Go语言代码包,我们已经可以看到光明的未来了)。

2) 从程序运行速度的角度来看,Go语言虽然已与 Java 不相上下,但还不及 C(差距正在不断地缩小)。

3) 从第三方库的角度来看,Go语言的库数量还远远不及其他几门主流语言(比如 Java、Python、Ruby 等)。不过与Go语言的年纪相比,用它实现的第三方库已经相当多了,并且它们的数量在持续地飞速增长中。

另外,在更深的层面,Go语言标准库中也有些不尽如人意的的地方,具体如下。

1) 从语言语法角度来看,Go语言语法里的语法糖并不多,这让许多 Python、Ruby 爱好者们对它不屑一顾。另外,变量赋值方式多得有点儿累赘了。最让人遗憾的也是我比较在意的一个地方是,Go语言不支持自定义的泛型类 型。

2) 从并发编程角度来看,Go语言提供的并发模型很强大,但也有一些编写规则需要了解。否则,很容易踩进“坑”里。其实不提倡把这叫作“坑”。因为这些所谓的“坑”,大都是我们由于对原理不熟悉而自己挖出来的。

3) 从垃圾回收角度看,Go语言的垃圾回收采用的是并发的标记清除算法(Concurrent Mark and Sweep,CMS)。虽然是并发的操作,时间比串行操作短很多,但是还是会在垃圾回收期间停止所有用户程序的操作。这一点多少会 影响到对实时性要求比较高的应用。不过,在Go语言 1.3 之后的版本中,这方面的问题已经得到了极大的改善。

虽然Go语言还有一些瑕疵,但从整体来看,它已经是一门非常优秀的通用编程语言了。并且,Go语言在今后的发展上会关注性能、可靠性、可移植性和一些功能增强,所以上述缺憾会随着版本的推进而逐渐减弱和消失。

【相关推荐:Go视频教程、编程教学】

以上就是go语言借鉴了哪些语言的详细内容,更多请关注北冥有鱼其它相关文章!

本文转载自【PHP中文网】,希望能给您带来帮助,苟日新、日日新、又日新,生命不息,学习不止。

《go语言借鉴了哪些语言.doc》

下载本文的Word格式文档,以方便收藏与打印。