go语言的起源
Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。该项目的三位领导者均是著名的计算机工程师:Robert Griesemer,参与开发 Java HotSpot 虚拟机;Rob Pike,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言;Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范。2009 年 11 月 10 日,开发团队将 Go 语言项目以 BSD-style 授权(完全开源)正式公布了 Linux 和 Mac OS X 平台上的版本。Hector Chu 于同年 11 月 22 日公布了 Windows 版本。
作为一个开源项目,Go 语言借助开源社区的有生力量达到快速地发展,并吸引更多的开发者来使用并改善它。自该开源项目发布以来,超过 200 名非谷歌员工的贡献者对 Go 语言核心部分提交了超过 1000 个修改建议。在过去的 18 个月里,又有 150 开发者贡献了新的核心代码。这俨然形成了世界上最大的开源团队,并使该项目跻身 Ohloh 前 2% 的行列。大约在 2011 年 4 月 10 日,谷歌开始抽调员工进入全职开发 Go 语言项目。开源化的语言显然能够让更多的开发者参与其中并加速它的发展速度。
在 Go 语言在 2010 年 1 月 8 日被 Tiobe(闻名于它的编程语言流行程度排名)宣布为“2009 年年度语言”后,引起各界很大的反响。目前 Go 语言在这项排名中的最高记录是在 2010 年 2 月创下的第 13 名,流行程度 1.778%。
Go 语言的特性
并发编程
Go 语言引入了 goroutine
,它是 Go 实现快速高效的并发编程的关键。通过调用 go 关键字,我们就可以让函数以 goroutine
的方式进行运行,也就是以协程
为单位进行运行。协程比线程更加的轻量级,也更节省系统资源,这使得我们可以创建大量的 goroutine
,从而进行轻松且高质量的并发编程。同时,goroutine
内部采用管道 channel
进行消息传递,从而实现共享内存。
错误处理
Go 语言中的错误处理的哲学和 C 语言一样,函数通过返回错误类型 (error) 或者 bool 类型(不需要区分多种错误状态时)表明函数的执行结果,调用检查返回的错误类型值是否是 nil
来判断调用结果。并引入了 defer
关键字用于标准的错误处理流程,并提供了内置函数 panic
、recover
完成异常的抛出与捕捉。
垃圾回收
Go 语言自带垃圾自动回收的功能,让 Go 语言不需要 delete 关键字,也不需要 free() 来释放内存。因此开发者无需考虑何时需要释放之前分配的内存的问题,系统会自动帮我们判断,并在适当的时候进行垃圾处理。垃圾自动回收是 Go 语言的一个特点,也是一大亮点。
多返回值
Go 语言和 Python 一样也支持函数的多返回值功能,这个特性让开发者可以从原来用各种比较别扭的方式返回多个值得痛苦中解脱出来,不需要为了一次返回多个值而专门定义一个结构体。并且每个返回值都有自己的名字,开发者还可以选择具体需要返回的值,只需要使用下划线作为占位符来丢掉不要的返回值即可。
匿名函数
Go 语言支持常规的匿名函数和闭包,开发者可以随意对匿名函数变量进行传递和调用,下面就是一个匿名函数样例:
f := func(x,y int) int {
return x+y
}
Go 语言可以做什么
Go 语言是谷歌发布的第二款开源编程语言。专门针对多处理器系统应用程序的编程进行了优化,使用 Go 编译的程序可以媲美 C 或 C++ 代码的速度,而且更加安全、支持并行进程。
Go 的目标是希望提升现有编程语言对程序库等依赖性 (dependency) 的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此也被设计用来解决多处理器的任务。目前,已经有很多公司开始使用 Go 语言开发自己的服务,甚至完全转向 Go 开发,也诞生了很多基于 Go 的服务和应用,比如 Dokcer
、k8s
等。
Google 对 Go 寄予厚望。旗下 App Engine 和其他部分产品已经开始使用 Go 语言来编写。作为开发 Go 语言的公司,当仁不让。
Facebook 也在用 GO,还专门在 GitHub 上建立了一个开源组织 Facebookgo,大家可以通过 GitHub 访问查看 Facebook 开源的项目,比如著名的——平滑升级的 grace。
此外,百度、阿里都在招 GO。京东云消息推送系统、云存储以及京东商城等都有使用 Go 做开发。
360 对 Golang 的使用主要是开源的日志搜索系统 Poseidon。而且,360 直播在招聘 Golang 开发工程师。
小米对 Golang 的支持,莫过于运维监控系统的开源,也就是 open-falcon 。此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用 Golang。
更多内容尽在微信公众号 ⌈卡卡成长汇聚⌋