www.Linuxidc.com
图灵社区会员 soooldier(soooldier@live.com) 专享 尊重版权
Linux公社(www.LinuxIDC.com)是专业的Linux系统门户½站,实时发布最新Linux资讯。
www.Linuxidc.com
图灵社区会员 soooldier(soooldier@live.com) 专享 尊重版权
Linux公社(www.LinuxIDC.com)是专业的Linux系统门户½站,实时发布最新Linux资讯。
www.Linuxidc.com
内 容 提 要
本书首先引领读者快速浏览
Go
语言的全貌
,
迅速消除读者对这门语言的陌生感
,
然后循序渐进地介绍
了
Go
语言的面向过程和面向对象的编程语法
,
其中穿插了一些与其他主流语言的比较以让读者理解
Go
语
言的设计动机
,
接着探讨了
Go
语言最为重要的并行编程方法
,
之后介绍了½络编程
、
工程管理
、
安全编程
、
开发工具等非语法相关½非常重要的内容
,
最后为一系列关于
Go
语言的文章
,
可以帮助读者更深入了解这
门全新的语言
。
本书适合所有层次的开发者阅读
。
图灵原创
Go语言编程
◆
编著 许式伟 吕桂华 等
责任编辑 王军花
◆
人民邮电出版社出版发行
北京市崇文区夕照寺街14号
邮编 100061 电子邮件 315@ptpress.com.cn
½址 http://www.ptpress.com.cn
北京 印刷
◆
开本:800×1000 1/16
印张:15.25
字数:361千字
印数:1
—
4 000册
2012年 8
月第
1
版
2012年 8
月北京第
1
次印刷
ISBN 978-7-115-29036-6
定价:49.00元
读者服务热线:
(010)51095186½604 印装质量热线:(010)67129223
反盗版热线:
(010)67171154
图灵社区会员 soooldier(soooldier@live.com) 专享 尊重版权
Linux公社(www.LinuxIDC.com)是专业的Linux系统门户½站,实时发布最新Linux资讯。
www.Linuxidc.com
前言:为什么我们需要一门新语言
1
1
前言:为什么我们需要一门新语言
编程语言已经非常多,偏性½敏感的编译型语言有
C、C++、Java、C#、Delphi和Objective-C
等,偏快速业务开发的动态解析型语言有PHP、Python、Perl、Ruby、JavaScript和Lua等,面向特
定领域的语言有Erlang、R和MATLAB等,那么我们为什么需要
Go这样一门新语言呢?
在2000年前的单机时代,C语言是编程之王。随着机器性½的提升、½件规模与复杂度的提
高,Java逐步取代了C的½½。½管看起来Java已经深获人心,½Java编程的½验并未½如人意。
历年来的编程语言排行榜(如图0-1所示)显示,Java语言的市场½额在逐步下跌,并趋近于C语
言的水平,显示了这门语言后劲不足。
Tiobe编程语言排行榜
2
3
4
Java语言
所占的百分比(%)
5
C语言
6
7
时间
图0-1
编程语言排行榜
①
8
Go语言官方自称,之所以开发Go
语言,是因为“近10年来开发程序之难让我们有点沮丧”
。
这一定½暗示了Go语言希望取代C和Java的地½,成为最流行的通用开发语言。
Go希望成为互联½时代的C语言。多数系统级语言(包括Java和C#)的根本编程哲学来源于
——————————
① 数据来源:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html。
9
图灵社区会员 soooldier(soooldier@live.com) 专享 尊重版权
Linux公社(www.LinuxIDC.com)是专业的Linux系统门户½站,实时发布最新Linux资讯。
www.Linuxidc.com
2
前言:为什么我们需要一门新语言
C++,
将C++的面向对象进一步发扬光大。
½是Go语言的设计者却有不同的看法,
他们认为C++ 真
的没啥½学的,值得学习的是C语言。C语言经久不衰的根源是它足够简单。因此,Go语言也要
足够简单!
那么,互联½时代的C语言需要考虑哪些关键问题呢?
首先,并行与分布式支持。多核化和集群化是互联½时代的典型特征。½为一个互联½时代
的C语言,必须要让这门语言操½多核计算机与计算机集群如同操½单机一样容易。
其次,½件工程支持。工程规模不断扩大是产业发展的必然趋势。单机时代语言可以只关心
问题本身的解决,而互联½时代的C语言还需要考虑½件品质保障和团队协½相关的话题。
最后,
编程哲学的重塑。
计算机½件经历了数十年的发展,
½成了面向对象等多种学术流派。
什么才是最½的编程实践?½为互联½时代的C语言,需要回答这个问题。
接下来我们来聊聊Go语言在这些话题上是如½应对的。
并发与分布式
多核化和集群化是互联½时代的典型特征,那语言需要哪些特性来应对这些特征呢?
第一个话题是并发执行的“执行½”
。执行½是个½象的概念,在操½系统层面有多个概念
与之对应,比如操½系统自己掌管的进程(process)
、进程内的线程(thread)以及进程内的协程
(coroutine,也叫½量级线程)
。多数语言在语法层面并不直接支持协程,而通过库的方式支持的
协程的功½也并不完整,比如仅仅提供协程的创建、销毁与切换等½力。如果在这样的协程中调
用一个同步IO操½,比如½络通信、本地文件读写,½会阻塞其他的并发执行协程,从而无法真
正达到协程本身期望达到的目标。
Go语言在语言级别支持协程,叫goroutine。Go语言标准库提供的所有系统调用(syscall)操
½,½然也包括所有同步IO操½,½会出让CPU给其他goroutine,这让事情变得非常简单。我们
对比一下Java和Go,近距离观摩下两者对“执行½”的支持。
为了简化,我们在样例中½用的是Java标准库中的线程,而不是协程,具½代码如下:
public class
MyThread
implements
Runnable {
String arg;
public
MyThread(String a) {
arg = a;
}
public void
run() {
// ...
}
public static void
main(String[] args) {
new
Thread(new MyThread("test")).start();
// ...
}
图灵社区会员 soooldier(soooldier@live.com) 专享 尊重版权
Linux公社(www.LinuxIDC.com)是专业的Linux系统门户½站,实时发布最新Linux资讯。
评论