Go语言概述

Go语言是谷歌2009发布的第二款开源编程语言,它意在使人们能够方便的构建简单、可靠、高效的软件。

Go语言借鉴了Unix的设计哲学,汲取了C语言的优势,针对多处理器系统应用程序编程进行了专门优化,使用Go编译的程序可以媲美C或C++代码的速度,而且支持并行进程,还更加安全。Go语言有望成为互联网时代的C语言。

为什么还需要Go?

程序设计语言中,注重性能的有C、C++、Java、C#、Delphi和Objective-C等,强调快速业务开发的有PHP、Python、Perl、Ruby、JavaScript和Lua等,在特定领域也有Erlang、R和MATLAB等,为什么我们还需要Go这样一门新语言?

在单机时代,C是程序设计语言之王。但随着机器性能的提升、软件规模与复杂度的提高,2000年之后,Java逐步取代了C的位置。尽管如此,Java的编程体验并未尽如人意,其市场份额整体呈现下降趋势。Go语言官方认为,“近10年来开发程序之难让我们有点沮丧”。Go语言希望像C语言一样简洁、高效,同时又适应互联网时代的编程需求,成为互联网时代的C语言,成为最流行的通用开发语言。

其他系统级的语言(如,Java和C#),它们的设计思想源于对C++面向对象特性的发扬光大,而Go直接根源于C的简洁、高效,实现了编程哲学的重塑,同时满足了互联网时代的并行与分布式的需要以及软件工程的大规模需求。

起源及演进

在基础架构软件这个层面上,最早只有C语言,后来出现了C++。尽管C++在性能不受影响的情况下,更容易驾驭大规模的复杂项目,但是它并没有太好的平衡代码的易用性与健壮性问题。这一潜在问题的存在,给Java的诞生和发展提供了机遇。随着高并发需求的逐步增强,又出现了Erlang、Scala、Rust和Go,四种新的基础架构语言,目前Go是四种新语言中表现最好的。

关键里程碑

2007年,谷歌把Go作为一个20%项目开始研发;

2009年11月10日,Go语言以开放源代码的方式向全球发布;

2012年3月28日,Go语言的第一个正式版本Go1发布;

2013年,是Go语言更新最频繁的一年;

2015年8月19日,Go语言Go 1.5版发布,本次更新中移除了”最后残余的C代码”;

2018年2月16日,Go语言Go 1.10版发布。

三位主要作者

Ken Thompson:1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他是Unix的原创者之一,对C语言的出现也做出了巨大贡献;

Rob Pike:曾是贝尔实验室(Bell Labs)的Unix团队和Plan 9操作系统计划的成员。他与Thompson共创出UTF-8 字元编码;

Robert Griesemer:曾协助制作Java的HotSpot编译器和Chrome浏览器的JavaScript引擎V8。

设计哲理

Go语言保持极端简单性的行为文化。Go具有一定的后发优势,它的基础部分实现的不错,但它的语言特性不多,而且不太会增加新特性了。Go的类型系统足可以使程序员避免在动态语言中会无意犯下的大多数错误,但相对而言,它在带类型的语言中又算是类型系统比较简单的。Go提倡充分利用现代计算机系统设计,尤其强调局部性的重要意义。Go的库和工具充分地尊重惯例,避免了配置和解释,从而简化了程序逻辑,提高了多种多样的Go语言程序之间的相似性,使得它更容易学习和掌握。

主要语言特性

自动垃圾回收

更丰富的内置类型

函数多返回值

错误处理

匿名函数和闭包

类型和接口

并发编程

反射

语言交互性

应用实例

几乎在基础架构软件的每一个领域,都涌现了由Go语言编写的新软件,如最好的容器软件Docker,还有ETCD、Kubernetes,以及数据库领域的TiDB、InfluxDB,消息系统的NSQ和缓冲系统的GroupCache。并且Go语言作为服务器通用语言的机会越来越大,如Beego、Gorilla等Go语言Web框架持续走热。

以太坊也是用Go实现的。

运行环境

类Unix系统——Linux,FreeDB,OpenBSD和Mac OS X,还有Plan 9和Windows。只要在其中一个环境中写了一个程序,那么基本上不加修改就可以在其他环境运行。

编程工具

LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由QT编写;

Goland就是专门针对Go语言的集成开发环境(目前还只是早期评估版本,可以免费使用);

Vim;

Eclipse。

Go家族

Go主要继承C、Pascal和CSP三个祖先。从C中,Go继承了表达式语法、控制流程语句、基本数据类型、按值调用的形参和指针。但更重要的是,Go继承了C所强调的要点:程序要编译成高效的机器码,并自然地与所处的操作系统提供的抽象机制相配合;从Pascal分支,Go继承了包概念、消除模块接口文件和模块实现文件之间的差异以及包、导入和声明的语法;从CSP(一系列名不见经传的研究用语言)继承了通道、函数式编程等思想。

学习资料

Go语言在线教程:http://www.runoob.com/go/

Go语言官网:https://golang.org

Go语言中文网(含中文开发文档):https://studygolang.com/

The Go Programming Language:http://www.nostack.info:6060

参考资料

[1] 许式伟,吕桂华.Go语言编程.北京:人民邮电出版社,2012

[2] 【美】艾伦 A.A 多诺万,【美】布莱恩 W. 柯尼汉.Go语言程序设计(李道兵、高博等译).北京:机械工业出版社,2017

[3] Go语言百度百科:https://baike.baidu.com/item/Go语言/3246011?fr=aladdin

作者简介

2005年山东师范大学计算机科学与技术专业毕业,后在清华大学(2005、2007、2017、2018)、山东大学(2007)、复旦大学(2009)、浙江大学(2011)学习生活。曾在东方通信、华硕等公司工作。

首创区块链哲圈,不朽链的开创者。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180716G00AN100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券