GO的传说

栏目: Go · 发布时间: 5年前

内容简介:2007年,谷歌三位工程师:罗布•派克(Rob Pike), 肯•汤普逊(Ken Thompson)和罗伯特•格里泽默(Robert Griesemer)开始设计一门全新的语言,这是Go语言的最初原型谷歌把Go作为一个20%项目开始研发,即让员工抽出本职工作之外时间的20%, 投入在该项目上。Go 项目团队将 2009 年 11 月 10 日,即该语言正式对外开源的日字作为其官方生日。源代码最初托管在 code.google.com 上,之后几年才逐步的迁移到 GitHub 上。
  • 传说即故事。

简史

1、诞生

2007年,谷歌三位工程师:罗布•派克(Rob Pike), 肯•汤普逊(Ken Thompson)和罗伯特•格里泽默(Robert Griesemer)开始设计一门全新的语言,这是 Go 语言的最初原型

谷歌把Go作为一个20%项目开始研发,即让员工抽出本职工作之外时间的20%, 投入在该项目上。

Go 项目团队将 2009 年 11 月 10 日,即该语言正式对外开源的日字作为其官方生日。源代码最初托管在 code.google.com 上,之后几年才逐步的迁移到 GitHub 上。

它是基于编译、垃圾收集和并发的编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美 C / C++代码的速度,而且更加安全、支持并行进程。作为出现在21世纪的语言,其近C的执行性能和近解析型语言的开发效率,以及近乎于完美的编译速度,已经风靡全球

2、吉祥物

Go语言的吉祥物如下,像鼹鼠:

GO的传说

9.jpg

其实是一种英文名为gopher的小动物,中文叫囊地鼠:

GO的传说

3.jpg

3、特性

总而言之:简洁 快速 安全 并行 开源

具体而言:

  1. 保留但大幅度简化指针:

    Golang 保留着C中值和指针的区别,但是对于指针繁琐用法进行了大量的简化,引入引用的概念。所以在 Golang 中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误。

2.多参数返回:

还记得在C里面为了回馈多个参数,不得不开辟几段指针传到目标函数中让其操作么?在 Go 里面这是完全不必要的。而且多参数的支持让 Go 无需使用繁琐的 exceptions 体系,一个函数可以返回期待的返回值加上 error,调用函数后立刻处理错误信息,清晰明了。

3.Array, slice, map 等内置基本数据结构

Golang 最让人赞叹不易的特性,就是 [interface 的设计]。任何数据结构,只要实现了 interface 所定义的函数,自动就 implement 了这个 interface,没有像 Java 那样冗长的 class申明,提供了[灵活太多的设计度和 OO (面向对象)抽象度],让你的代码也非常干净。

4.OO 面向对象: Golang 本质上不是面向对象语言,它还是过程化的。但是,在 Golang 中, 你可以很轻易的做大部分你在别的 OO 语言中能做的事,用更简单清晰的逻辑。是的,在这里,不需要 class,仍然可以继承,仍然可以多态,但是速度却快得多。因为本质上,OO 在 Golang 中,就是 普通的 struct 操作

5.Goroutine : 如果你完全不了解 Goroutine,那么你只需要知道,这玩意是超级轻量级的类似线程的东西,但通过它,你不需要复杂的线程操作锁操作,不需要 care 调度,就能玩转基本的并行程序。在 Golang 里,触发一个 routine 和 erlang spawn 一样简单。基本上要掌握 Golang,以 Goroutine 和 channel 为核心的 内存模型 是必须要懂的

优势:

  1. 部署简单: go编译生成一个静态可执行文件,除了glibc外没有其他外部依赖,这让部署变得异常方便,目标机器上只需要一个基础的系统和必要的管理,监控工具,完全不用操心应用所需的各种包 库的依赖关系,大大减轻维护的负担.
  2. 并发性好:Goroutine和channel是编写高并发的服务端软件变得相当容易,很多情况下不需要考虑锁机制以及相关的各种问题.单个go应用也能有效的利用多个cpu,并发执行的性能好.
  3. 良好的语言设计: 从学术角度讲go语言其实非常平庸,不过支持很多高级的语言特征,但从工程角度,go语言的设计十分优秀,规范足够简单灵活,更重要的是go语言自带完善的 工具 链,大大提高团队的协作一致性.
  4. 执行性能好: 虽然不如c与java,但通常比原生的 python 应用还是高一个数量级的,适合编写一些瓶颈业务,内存占用十分节省.
  5. 支持[垃圾回收],这属于[动态语言]的特性之一吧,虽然目前来说GC不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC。
  6. 跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译 linux 的应用,如何做到的呢?Go引用了[plan9]的代码,这就是不依赖系统的信息。

以上所述就是小编给大家介绍的《GO的传说》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

UCD火花集

UCD火花集

UCDChina / 人民邮电出版社 / 2009 / 25.00元

本书收集了UCDChina上线以来推出的13个话题,内容涵盖了产品设计的全部流程,按顺序集结到第一到第十三章中,讨论了如何研究用户、如何将用户需求应用到产品设计中、如何传达和协作。在第十四章,几位设计师分享了生活中的UE故事。第十五章,列举了一些实例和实践者的观点。本书适合有一定工作经验,从事产品设计、产品策划、交互设计、视觉设计、用户研究、前端开发、网站运营,以及所有与互联网有关的从业人员阅读。一起来看看 《UCD火花集》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码