GO语言
Go(通常称为Golang)是由Google于2009年由Robert Griesemer,Rob Pike和Ken Thompson(C语言作者之一,UNXI创建者)创建的一种编程语言。Go是一个静态类型、编译型语言,很像C。具有 存储器的安全,垃圾回收,结构输入和 CSP式的并发特性。它的编译器,工具,和源代码都是免费和开源的。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
诞生背景
设计Go语言是为了解决当时Google开发遇到的以下这些问题:
- 大量的C++代码,同时又引入了Java和Python
- 成千上万的工程师
- 数以万计行的代码
- 分布式的编译系统
- 数百万的服务器
上面这些问题产生的痛点:
- 编译慢
- 失控的依赖
- 每个工程师只是用了一个语言里面的一部分
- 程序难以维护(可读性差、文档不清晰等)
- 更新的花费越来越长
- 交叉编译困难
单纯看上面这些问题, 可以看出当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便。
单纯在语言方面,性能好的语言(比如C/C++),没有很高的开发效率和灵活性;开发效率高的语言(.NET、Python等)又不具备足够快的性能。 Go语言的诞生在某种意义上也是为了解决这个问题。
语言特性
垃圾回收
- 自动回收,不需要开发人员处理,失去了最后的引用的变量将会被销毁
- 降低编码人员工作
支持并发
- go 操作
- goroutine 用户级线程
多返回值
- 函数的返回值不止一个可以
- 强调简单、易学
- 内存管理和语法简单
- 快速编译
- 并发支持
- 静态类型
- 部署简单(go install)
- 自身就是文档(通过godoc将代码中的注释信息构造成文档)
- 开源免费(BSD licensed)
应用场景
它最初的构想是作为一个系统编程语言,但目前也被用于像Web Server,存储架构等这类分布式、高并发系统中。当然也可以用于一般的文字处理和作为脚本程序。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
分布式系统,数据库代理器等网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用、
内存数据库,前一段时间google开发的groupcache,couchbase的部分组建
云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。
Go的编译器作为Native Client被内嵌到Chrome浏览器中,可以被Web应用程序用来执行本地代码;同时Go也可以运行在Intel和ARM的处理器上。
目前已被Google集成到Google APP Engine中,在基于Google App Engine基础设施的Web应用中也得到了很好的应用。目前GAE中仅支持三种应用程序开发语言:Java、Python和Go。(注:GAE的链接)
但不适合应用到对实时性要求很高的系统中,因为Go的内存模型是基于垃圾回收机制和原子内存分配。
发展未来
但是作为2009年诞生的一门语言,至今(2018年)已经有九年时间。它的发展并没有像一个框架那样迅速铺展开来,但是借着Google这颗大树,市面已经有很多知名公司都在使用这门语言。所以还以有必要了解以下的,主要是体验一下Go语言的特性。