From e2f546cb7692f4a95f680b99d0c6c3faa695381e Mon Sep 17 00:00:00 2001 From: mikespook Date: Wed, 10 Apr 2013 11:14:03 +0800 Subject: [PATCH] add the chinese version and some tweakings --- README.md | 20 +++---- eBook/01.1.md | 46 ++++++++-------- eBook/01.2.md | 104 +++++++++++++++++------------------ eBook/02.1.md | 4 +- eBook/directory.md | 10 ++-- eBook/images/1.2.Go_logo.jpg | Bin 24957 -> 24198 bytes eBook/preface.md | 53 +++++++++--------- 7 files changed, 119 insertions(+), 118 deletions(-) diff --git a/README.md b/README.md index f194b85..e198fae 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ 《Go入门指南》 =================== -在接触Go语言之后,对这门编程语言非常着迷,期间也陆陆续续开始一些帮助国内编程爱好者了解和发展Go语言的工作,比如开始录制视频教程[《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming)。但由于目前国内并没有比较好的Go语言书籍,而国外的优秀书籍因为英文的缘故在一定程度上也为不少Go语言爱好者带来了一些学习上的困扰,不仅为了加快扩散Go爱好者的国内群体,同时充分贯彻 [Asta谢](https://github.com/astaxie) 的为己为人精神,本人在完成阅读这本名叫《The Way to Go》之后,决定每天抽出一点时间来进行翻译的工作,并且以开源的形式免费分享给有需要的Go语言爱好者。 +在接触 Go 语言之后,对这门编程语言非常着迷,期间也陆陆续续开始一些帮助国内编程爱好者了解和发展 Go 语言的工作,比如开始录制视频教程[《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming)。但由于目前国内并没有比较好的 Go 语言书籍,而国外的优秀书籍因为英文的缘故在一定程度上也为不少 Go 语言爱好者带来了一些学习上的困扰,不仅为了加快扩散 Go 爱好者的国内群体,同时充分贯彻 [Asta谢](https://github.com/astaxie) 的为己为人精神,本人在完成阅读这本名叫《The Way to Go》之后,决定每天抽出一点时间来进行翻译的工作,并且以开源的形式免费分享给有需要的 Go 语言爱好者。 -尽管该书对目前Go语言版本来说有小部分内容相对过时,但是为当下不可多得的好书,部分内容已获得作者同意根据当前Go语言版本进行修改。 +尽管该书对目前 Go 语言版本来说有小部分内容相对过时,但是为当下不可多得的好书,部分内容已获得作者同意根据当前 Go 语言版本进行修改。 -该翻译版本已获得原作者(Ivo Balbaert)本人授权,并表示支持开源事业的发展! +该翻译版本已获得原作者(Ivo Balbaert)本人授权,并表示支持开源事业的发展! ##翻译进度 [语言的主要特性与发展的环境和影响因素](eBook/01.2.md) ##支持本书 -如果你喜欢本书《Go入门指南》,你可以参与到本书的翻译或纠正工作中来,一同完善本书并帮助壮大Go语言在国内的学习群体,给大家提供更好的学习资源。 +如果你喜欢本书《Go 入门指南》,你可以参与到本书的翻译或纠正工作中来,一同完善本书并帮助壮大 Go 语言在国内的学习群体,给大家提供更好的学习资源。 ##交流 欢迎大家加入QQ群:259316004(不要被群名字迷惑了,这里牛人可多了) @@ -23,17 +23,17 @@ Go语言学习园地:[studygolang.com](http://studygolang.com/) Golang中国:[golang.tc](http://www.golang.tc/) ###新人守则 -- 2012年3月28日以前的博文中的内容基本过时,不要再看 +- 2012 年 3 月 28 日以前的博文中的内容基本过时,不要再看 - 符合等式 ***百度+思考+失败+翻墙+谷歌+尝试=解决*** 的问题最好不要发问 -- 不要问Go现在的发展前景如何 -- 不要问学习Go语言能不能找到工作 -- 不要问现在Go语言有哪些实际应用 +- 不要问 Go 现在的发展前景如何 +- 不要问学习 Go 语言能不能找到工作 +- 不要问现在 Go 语言有哪些实际应用 ##致谢 - 本书原作者:Ivo Balbaert ##授权许可 -除特别声明外,本书中的内容使用[CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/)(创作共用 署名-相同方式共享3.0许可协议)授权,代码遵循[BSD 3-Clause License](https://github.com/astaxie/build-web-application-with-golang/blob/master/LICENSE.md)(3项条款的BSD许可协议)。 +除特别声明外,本书中的内容使用[CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/)(创作共用 署名-相同方式共享0 许可协议)授权,代码遵循[BSD 3-Clause License](https://github.com/astaxie/build-web-application-with-golang/blob/master/LICENSE.md)(3 项条款的 BSD 许可协议)。 ##开始阅读 -[前言](./eBook/preface.md) \ No newline at end of file +[前言](./eBook/preface.md) diff --git a/eBook/01.1.md b/eBook/01.1.md index c79fa54..d4453b5 100644 --- a/eBook/01.1.md +++ b/eBook/01.1.md @@ -1,55 +1,55 @@ #1.1 起源与发展 -Go语言起源2007年,并于2009年正式对外发布。它从2009年9月21日开始作为谷歌公司20%兼职项目,即相关员工利用20%的空余时间来参与Go语言的研发工作。该项目的三位领导者均是著名的IT工程师:Robert Griesemer,参与开发Java HotSpot 虚拟机;Rob Pike,Go语言项目总负责人,贝尔实验室Unix团队成员,参与的项目包括Plan 9,Inferno操作系统和Limbo编程语言;Ken Thompson,贝尔实验室Unix团队成员,C语言、Unix和Plan 9的创始人之一,与 Rob Pike 共同开发了UTF-8字符集规范。自2008年1月起,Ken Thompson 就开始研发一款以C语言为目标结果的编译器来拓展Go语言的设计思想。 +Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。该项目的三位领导者均是著名的 IT 工程师:Robert Griesemer,参与开发 Java HotSpot 虚拟机;Rob Pike,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言;Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范。自 2008 年 1 月起,Ken Thompson 就开始研发一款以 C 语言为目标结果的编译器来拓展 Go 语言的设计思想。 *这是一个由计算机领域“发明之父”所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非常深刻的见解* ![](images/1.1.designers_of_Go.jpg?raw=true) -图1.1 Go语言设计者:Griesemer,Thompson 和 Pike +图1.1 Go语言设计者:Griesemer、Thompson 和 Pike -在2008年年中,Go语言的设计工作接近尾声,一些员工开始以全职工作状态投入到这个项目的编译器和运行实现上。Ian Lance Taylor 也加入到了开发团队中,并于2008年5月创建了一个gcc前端。 +在 2008 年年中,Go 语言的设计工作接近尾声,一些员工开始以全职工作状态投入到这个项目的编译器和运行实现上。Ian Lance Taylor 也加入到了开发团队中,并于 2008 年 5 月创建了一个 gcc 前端。 -Russ Cox 加入开发团队后着手语言和类库方面的开发,也就是Go语言的标准包。在2009年10月30日,Rob Pike 以 Google Techtalk 的形式第一次向人们宣告了Go语言的存在。 +Russ Cox 加入开发团队后着手语言和类库方面的开发,也就是 Go 语言的标准包。在 2009 年 10 月 30 日,Rob Pike 以 Google Techtalk 的形式第一次向人们宣告了 Go 语言的存在。 -直到2009年11月10日,开发团队将Go语言项目以BSD-style授权(完全开源)正式公布在Linux和Mac OS X平台上的版本。Hector Chu 于同年11月22日公布了Windows版本。 +直到 2009 年 11 月 10 日,开发团队将 Go 语言项目以 BSD-style 授权(完全开源)正式公布在 Linux 和 Mac OS X 平台上的版本。Hector Chu 于同年 11 月 22 日公布了 Windows 版本。 -作为一个开源项目,Go语言借助开源社区的有生力量达到快速地发展,并吸引更多的开发者来使用并改善它。自该开源项目发布以来,超过200名非谷歌员工的贡献者对Go语言核心部分提交了超过1000个修改建议。在过去的18个月里,又有150开发者贡献了新的核心代码。这俨然形成了世界上最大的开源团队,并使该项目跻身 [Ohloh](http://www.ohloh.net) 前2%的行列。大约在2011年4月10日,谷歌开始抽调员工进入全职开发Go语言项目。开源化的语言显然能够让更多的开发者参与其中并加速它的发展速度。Andrew Gerrand 在2010年加入到开发团队中成为共同开发者与支持者。 +作为一个开源项目,Go 语言借助开源社区的有生力量达到快速地发展,并吸引更多的开发者来使用并改善它。自该开源项目发布以来,超过 200 名非谷歌员工的贡献者对 Go 语言核心部分提交了超过 1000 个修改建议。在过去的 18 个月里,又有 150 开发者贡献了新的核心代码。这俨然形成了世界上最大的开源团队,并使该项目跻身 [Ohloh](http://www.ohloh.net) 前 2% 的行列。大约在 2011 年 4 月 10 日,谷歌开始抽调员工进入全职开发 Go 语言项目。开源化的语言显然能够让更多的开发者参与其中并加速它的发展速度。Andrew Gerrand 在 2010 年加入到开发团队中成为共同开发者与支持者。 -在Go语言在2010年1月8日被 [Tiobe](http://www.tiobe.com)(闻名于它的编程语言流行程度排名)宣布为“2009年年度语言”后,引起各界很大的反响。目前Go语言在这项排名中的最高记录是在2010年2月创下的第13名,流行程度1778%。 +在 Go 语言在 2010 年 1 月 8 日被 [Tiobe](http://www.tiobe.com)(闻名于它的编程语言流行程度排名)宣布为“2009 年年度语言”后,引起各界很大的反响。目前 Go 语言在这项排名中的最高记录是在 2010 年 2 月创下的第13名,流行程度 1778%。 ###时间轴: -- 2007年9月21日:雏形设计 -- 2009年11月10日:首次公开发布 -- 2010年1月8日:当选2009年年度语言 -- 2010年5月:谷歌投入使用 -- 2011年5月5日:Google App Engine 支持Go语言 +- 2007 年 9 月 21 日:雏形设计 +- 2009 年 11 月 10日:首次公开发布 +- 2010 年 1 月 8 日:当选 2009 年年度语言 +- 2010 年 5 月:谷歌投入使用 +- 2011 年 5 月 5 日:Google App Engine 支持 Go 语言 -从2010年5月起,谷歌开始将Go语言投入到后端基础设施的实际开发中,例如开发用于管理后端复杂环境的项目。有句话叫“吃你自己的狗食”,这也体现了谷歌确实想要投资这门语言,并认为它是有生产价值的。 +从 2010 年 5 月起,谷歌开始将 Go 语言投入到后端基础设施的实际开发中,例如开发用于管理后端复杂环境的项目。有句话叫“吃你自己的狗食”,这也体现了谷歌确实想要投资这门语言,并认为它是有生产价值的。 -Go语言的官方网站是 [https://golang.org](https://golang.org),这个站点采用Python作为前端,并且使用Go语言自带的工具 godoc 运行在 Google App Engine 上来作为Web服务器提供文本内容。在官网的首页有一个功能叫做 Go-playground,是一个Go代码的简单编辑器的沙盒,它可以在没有安装Go语言的情况下在你的浏览器中编译并运行Go,它提供了一些示例,其中包括国际惯例“Hello, World!”。 +Go 语言的官方网站是 [https://golang.org](https://golang.org),这个站点采用 Python 作为前端,并且使用 Go 语言自带的工具 godoc 运行在 Google App Engine 上来作为 Web 服务器提供文本内容。在官网的首页有一个功能叫做 Go-playground,是一个 Go 代码的简单编辑器的沙盒,它可以在没有安装 Go 语言的情况下在你的浏览器中编译并运行 Go,它提供了一些示例,其中包括国际惯例“Hello, World!”。 -更多的信息详见 [http://code.google.com/p/go/](http://code.google.com/p/go/),Go项目Bug追踪和功能预期详见 [http://code.google.com/p/go/issues/list](http://code.google.com/p/go/issues/list)。 +更多的信息详见 [http://code.google.com/p/go/](http://code.google.com/p/go/),Go 项目 Bug 追踪和功能预期详见 [http://code.google.com/p/go/issues/list](http://code.google.com/p/go/issues/list)。 -Go通过以下的Logo来展示它的速度,并以囊地鼠(Gopher)作为它的吉祥物。 +Go 通过以下的 Logo 来展示它的速度,并以囊地鼠(Gopher)作为它的吉祥物。 ![](images/1.2.Go_logo.jpg?raw=true) -图1.2 Go语言Logo +图1.2 Go 语言 Logo 谷歌邮件列表 [golang-nuts](http://groups.google.com/group/golang-nuts/) 非常活跃,每天的讨论和问题解答数以百计。 -关于Go语言在 Google App Engine 的应用,这里有一个单独的邮件列表 [google-appengine-go](https://groups.google.com/forum/#!forum/google-appengine-go),不过2个邮件列表的讨论内容并不是分得很清楚,都会涉及到相关的话题。[go-lang.cat-v.org/](http://go-lang.cat-v.org/) 是Go语言开发社区的资源站,[irc.freenode.net](http://irc.freenode.net) 的#go-nuts 是官方的 Go IRC频道。 +关于 Go 语言在 Google App Engine 的应用,这里有一个单独的邮件列表 [google-appengine-go](https://groups.google.com/forum/#!forum/google-appengine-go),不过 2 个邮件列表的讨论内容并不是分得很清楚,都会涉及到相关的话题。[go-lang.cat-v.org/](http://go-lang.cat-v.org/) 是 Go 语言开发社区的资源站,[irc.freenode.net](http://irc.freenode.net) 的#go-nuts 是官方的 Go IRC 频道。 -[http://twitter.com/#!/go_nuts](http://twitter.com/#!/go_nuts) 是Go语言在Twitter的官方帐号,大家一般使用 #golang 作为话题标签。 +[http://twitter.com/#!/go_nuts](http://twitter.com/#!/go_nuts) 是 Go 语言在 Twitter 的官方帐号,大家一般使用 #golang 作为话题标签。 -这里还有一个在Linked-in的小组:[http://www.linkedin.com/groups?gid=2524765&trk=myg_ugrp_ovr](http://www.linkedin.com/groups?gid=2524765&trk=myg_ugrp_ovr)。 +这里还有一个在 Linked-in 的小组:[http://www.linkedin.com/groups?gid=2524765&trk=myg_ugrp_ovr](http://www.linkedin.com/groups?gid=2524765&trk=myg_ugrp_ovr)。 -Go编程语言的维基百科:[http://en.wikipedia.org/wiki/Go_(programming_language)](http://en.wikipedia.org/wiki/Go_(programming_language)) +Go 编程语言的维基百科:[http://en.wikipedia.org/wiki/Go_(programming_language)](http://en.wikipedia.org/wiki/Go_(programming_language)) -Go语言相关资源的搜索引擎页面:[http://go-lang.cat-v.org/go-search](http://go-lang.cat-v.org/go-search) +Go 语言相关资源的搜索引擎页面:[http://go-lang.cat-v.org/go-search](http://go-lang.cat-v.org/go-search) -Go语言还有一个运行在 Google App Engine 上的 [Go Tour](http://go-tour.appspot.com/),你也可以通过执行命令 `go install go-tour.googlecode.com/hg/gotour` 安装到你的本地机器上。 +Go 语言还有一个运行在 Google App Engine 上的 [Go Tour](http://go-tour.appspot.com/),你也可以通过执行命令 `go install go-tour.googlecode.com/hg/gotour` 安装到你的本地机器上。对于中文读者,可以访问该指南的[中文版本](http://go-tour-zh.appsp0t.com/),或通过命令 `go install https://bitbucket.org/mikespook/go-tour-zh/gotour` 进行安装。 ##链接 - [目录](directory.md) diff --git a/eBook/01.2.md b/eBook/01.2.md index 36b4130..c1b7dfe 100644 --- a/eBook/01.2.md +++ b/eBook/01.2.md @@ -1,125 +1,125 @@ #1.2 语言的主要特性与发展的环境和影响因素 -##1.2.1 影响Go语言发展的早期编程语言 -正如“21世界的C语言”这句话所说,Go语言并不是凭空而造的,而是和C++,Java和C#一样属于C系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入到Go语言当中。 +##1.2.1 影响 Go 语言发展的早期编程语言 +正如“21 世界的 C 语言”这句话所说,Go 语言并不是凭空而造的,而是和 C++、Java 和 C# 一样属于 C 系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入到 Go 语言当中。 -在声明和包的设计方面,Go语言受到Pascal,Modula和Oberon系语言的影响;在并发原理的设计上,Go语言从同样受到 Tony Hoare 的CSP(通信序列进程 *Communicating Squential Processes*)理论影响的Limbo和Newsqueak的实践中借鉴了一些经验,并使用了和Erlang相同的机制。 +在声明和包的设计方面,Go 语言受到 Pascal、Modula 和 Oberon 系语言的影响;在并发原理的设计上,Go 语言从同样受到 Tony Hoare 的 CSP(通信序列进程 *Communicating Squential Processes*)理论影响的 Limbo 和 Newsqueak 的实践中借鉴了一些经验,并使用了和 Erlang 类似的机制。 -这是一门完全开源的编程语言,因为它使用BSD授权许可,所以任何人都可以进行商业软件的开发而不需要支付任何费用。 +这是一门完全开源的编程语言,因为它使用 BSD 授权许可,所以任何人都可以进行商业软件的开发而不需要支付任何费用。 -尽管为了能够让目前主流的开发者们能够对Go语言中的类C语言的语法感到非常亲切而易于转型,但是它在极大程度上简化了这些语法,使得它们比C/C++的语法更加简洁和干净。同时,Go语言也拥有一些动态语言的特性,这使得使用Python和Ruby的开发者们在使用Go语言的时候感觉非常容易上手。 +尽管为了能够让目前主流的开发者们能够对 Go 语言中的类 C 语言的语法感到非常亲切而易于转型,但是它在极大程度上简化了这些语法,使得它们比 C/C++ 的语法更加简洁和干净。同时,Go 语言也拥有一些动态语言的特性,这使得使用 Python 和 Ruby 的开发者们在使用 Go 语言的时候感觉非常容易上手。 下图展示了一些其它编程语言对Go语言的影响: ![](images/1.3.influences_on_go.jpg?raw=true) -图1.3 其它编程语言对Go语言的影响 +图1.3 其它编程语言对 Go 语言的影响 ##1.2.2 为什么要创造一门编程语言 - C/C++的发展速度无法跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程语言,因此人们需要一门新的系统编程语言来弥补这个空缺,尤其是在计算机信息时代。 - 对比计算机性能的提升,软件开发领域不被认为发展地足够快或者比硬件发展更加成功(有许多项目均以失败告终),同时应用程序的体积始终在不断地扩大,这就迫切地需要一门具备更高层次概念的低级语言来突破现状。 -- 在Go语言出现之前,开发者们总是面临非常艰难的抉择,究竟是使用执行速度快但是编译速度并不理想的语言(如:C++),还是使用编译速度较快但执行效率不佳的语言(如:.NET,Java),或者说开发难度较低但执行速度一般的动态语言呢?显然,Go语言在这3个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发。 +- 在 Go 语言出现之前,开发者们总是面临非常艰难的抉择,究竟是使用执行速度快但是编译速度并不理想的语言(如:C++),还是使用编译速度较快但执行效率不佳的语言(如:.NET、Java),或者说开发难度较低但执行速度一般的动态语言呢?显然,Go 语言在这 3 个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发。 -##1.2.3 Go语言的发展目标 -Go语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。 +##1.2.3 Go 语言的发展目标 +Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。 -因此,Go语言是一门类型安全和内存安全的编程语言。虽然Go语言中仍有指针的存在,但并不允许进行指针运算。 +因此,Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。 -Go语言的另一个目标是对于网络通信,并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机,这一点对于谷歌内部的使用来说就非常重要了。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。 +Go 语言的另一个目标是对于网络通信,并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机,这一点对于谷歌内部的使用来说就非常重要了。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。 -这个特性显然是Go语言最强有力的部分,不仅支持了日益重要的多核与多处理器计算机,也弥补了现存编程语言在这方面所存在的不足。 +这个特性显然是 Go 语言最强有力的部分,不仅支持了日益重要的多核与多处理器计算机,也弥补了现存编程语言在这方面所存在的不足。 -Go语言中另一个非常重要的特性就是它的构建速度(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒。作为大量使用C++来构建基础设施的谷歌来说,无疑从根本上摆脱了C++在构建速度上非常不理想的噩梦。这不仅极大地提升了开发者的生产力,同时也使得软件开发过程中的代码测试环节更加紧凑,而不必浪费大量的时间在等待程序的构建上。 +Go 语言中另一个非常重要的特性就是它的构建速度(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒。作为大量使用 C++ 来构建基础设施的谷歌来说,无疑从根本上摆脱了 C++ 在构建速度上非常不理想的噩梦。这不仅极大地提升了开发者的生产力,同时也使得软件开发过程中的代码测试环节更加紧凑,而不必浪费大量的时间在等待程序的构建上。 -依赖管理是现今软件开发的一个重要组成部分,但是C语言中“头文件”的概念却导致越来越多因为依赖关系而使得构建一个大型的项目需要长达几个小时的时间。人们越来越需要一门具有严格的、简洁的依赖关系分析系统从而能够快速编译的编程语言。这正是Go语言采用包模型的根本原因,这个模型通过严格的依赖关系检查机制来加快程序构建的速度,提供了非常好的可量测性。 +依赖管理是现今软件开发的一个重要组成部分,但是 C 语言中“头文件”的概念却导致越来越多因为依赖关系而使得构建一个大型的项目需要长达几个小时的时间。人们越来越需要一门具有严格的、简洁的依赖关系分析系统从而能够快速编译的编程语言。这正是 Go 语言采用包模型的根本原因,这个模型通过严格的依赖关系检查机制来加快程序构建的速度,提供了非常好的可量测性。 -整个Go语言标准库的编译时间一般都在20秒以内,其它的常规项目也只需要半秒钟的时间来完成编译工作。这种闪电般的编译速度甚至比编译C语言或者Fortran更加快,使得编译这一环节不再成为在软件开发中困扰开发人员的问题。在这之前,动态语言将快速编译作为自身的一大亮点,像C++那样的静态语言一般都有非常漫长的编译和链接工作。而同样作为静态语言的Go语言,通过自身优良的构建机制,成功地了去除了这个弊端,使得程序的构建过程变得微不足道,拥有了像脚本语言和动态语言那样的高效开发的能力。 +整个 Go 语言标准库的编译时间一般都在 20 秒以内,其它的常规项目也只需要半秒钟的时间来完成编译工作。这种闪电般的编译速度甚至比编译 C 语言或者 Fortran 更加快,使得编译这一环节不再成为在软件开发中困扰开发人员的问题。在这之前,动态语言将快速编译作为自身的一大亮点,像 C++ 那样的静态语言一般都有非常漫长的编译和链接工作。而同样作为静态语言的 Go 语言,通过自身优良的构建机制,成功地了去除了这个弊端,使得程序的构建过程变得微不足道,拥有了像脚本语言和动态语言那样的高效开发的能力。 -另外,Go语言在执行速度方面也可以与C/C++相提并论。 +另外,Go 语言在执行速度方面也可以与 C/C++ 相提并论。 -由于内存问题(通常称为内存泄漏)长期以来一直伴随着C++的开发者们,Go语言的设计者们认为内存管理不应该是开发人员所需要考虑的问题。因此尽管Go语言像其它静态语言一样执行本地代码,但它依旧运行在某种意义上的虚拟机,以此来实现高效快速的垃圾回收(使用了一个简单的标记-清除算法)。 +由于内存问题(通常称为内存泄漏)长期以来一直伴随着 C++ 的开发者们,Go 语言的设计者们认为内存管理不应该是开发人员所需要考虑的问题。因此尽管 Go 语言像其它静态语言一样执行本地代码,但它依旧运行在某种意义上的虚拟机,以此来实现高效快速的垃圾回收(使用了一个简单的标记-清除算法)。 -尽管垃圾回收并不容易实现,但考虑这将是未来并发应用程序发展的一个重要组成部分,Go语言的设计者们还是完成了这项艰难的任务。 +尽管垃圾回收并不容易实现,但考虑这将是未来并发应用程序发展的一个重要组成部分,Go 语言的设计者们还是完成了这项艰难的任务。 -Go语言还能够在运行时进行反射相关的操作。 +Go 语言还能够在运行时进行反射相关的操作。 使用 `go install` 能够很轻松地对第三方包进行部署。 -此外,Go语言还支持调用由C语言编写的海量库文件(第3.9节),从而能够将过去开发的软件进行快速迁移。 +此外,Go 语言还支持调用由 C 语言编写的海量库文件(第3.9节),从而能够将过去开发的软件进行快速迁移。 ##1.2.4 指导设计原则 -Go语言通过减少关键字的数量(25个)来简化编码过程中的混乱和复杂度。干净、整齐和简洁的语法也能够提高程序的编译速度,因为这些关键字在编译过程中少到甚至不需要符号表来协助解析。 +Go语言通过减少关键字的数量(25 个)来简化编码过程中的混乱和复杂度。干净、整齐和简洁的语法也能够提高程序的编译速度,因为这些关键字在编译过程中少到甚至不需要符号表来协助解析。 -这些方面的工作都是为了减少编码的工作量,甚至可以与Java的简化程度相比较。 +这些方面的工作都是为了减少编码的工作量,甚至可以与 Java 的简化程度相比较。 -Go语言有一种极简抽象艺术家的感觉,因为它只提供了一到两种方法来解决某个问题,这使得开发者们的代码都非常容易阅读和理解。众所周知,代码的可读性是软件工程里最重要的一部分( ***译者注:代码是写给人看的,不是写给机器看的*** )。 +Go 语言有一种极简抽象艺术家的感觉,因为它只提供了一到两种方法来解决某个问题,这使得开发者们的代码都非常容易阅读和理解。众所周知,代码的可读性是软件工程里最重要的一部分( ***译者注:代码是写给人看的,不是写给机器看的*** )。 这些设计理念没有建立其它概念之上,所以并不会因为牵扯到一些概念而将某个概念复杂化,他们之间是相互独立的。 -Go语言有一套完整的编码规范,你可以在 [Go语言编码规范](http://golang.org/doc/go_spec.html) 页面进行查看。 +Go 语言有一套完整的编码规范,你可以在 [Go 语言编码规范](http://golang.org/doc/go_spec.html) 页面进行查看。 -它不像Ruby那样通过实现过程来定义编码规范。作为一门具有明确编码规范的语言,它要求可以采用不同的编译器如 gc 和 gccgo(第2.1节)进行编译工作,这对语言本身拥有更好的编码规范起到很大帮助。 +它不像 Ruby 那样通过实现过程来定义编码规范。作为一门具有明确编码规范的语言,它要求可以采用不同的编译器如 gc 和 gccgo(第 2.1 节)进行编译工作,这对语言本身拥有更好的编码规范起到很大帮助。 -[LALR](http://en.wikipedia.org/wiki/LALR_parser) 是Go语言的语法标准,你也可以在 `src/cmd/gc/go.y` 中查看到,这种语法标准在编译时不需要符号表来协助解析。 +[LALR](http://en.wikipedia.org/wiki/LALR_parser) 是 Go 语言的语法标准,你也可以在 `src/cmd/gc/go.y` 中查看到,这种语法标准在编译时不需要符号表来协助解析。 ##1.2.5 语言的特性 -Go语言从本质上(程序和结构方面)来实现并发编程。 +Go 语言从本质上(程序和结构方面)来实现并发编程。 -因为Go语言没有类和继承的概念,所以它和Java或C++看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。 +因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。 在传统的面向对象语言中,使用面向对象编程技术显得非常的臃肿,它们总是通过复杂的模式来构建庞大的类型层级,这违背了编程语言应该提升生产力的宗旨。 -函数是Go语言中的基本构件,它们的使用方法非常灵活。在第六章,我们会看到Go语言在函数式编程方面的基本概念。 +函数是 Go 语言中的基本构件,它们的使用方法非常灵活。在第六章,我们会看到 Go 语言在函数式编程方面的基本概念。 -Go语言使用静态类型,所以它是类型安全的一门语言,加上通过构建到本地代码,程序的执行速度也非常快。 +Go 语言使用静态类型,所以它是类型安全的一门语言,加上通过构建到本地代码,程序的执行速度也非常快。 作为强类型语言,隐式的类型转换是不被允许的,记住一条原则:让所有的东西都是显式的。 -Go语言其实也有一些动态语言的特性(通过关键字 `var`),所以它对那些逃离Java和.Net世界而使用Python,Ruby,Php和JavaScript的开发者们也具有很大的吸引力。 +Go 语言其实也有一些动态语言的特性(通过关键字 `var`),所以它对那些逃离 Java 和 .Net 世界而使用 Python、Ruby、PHP 和 JavaScript 的开发者们也具有很大的吸引力。 -Go语言支持交叉编译,比如说你可以在运行Linux系统的计算机上开发运行下Windows下运行的应用程序。这是第一门完全支持UTF-8的编程语言( ***译者注:.NET好像也支持吧?*** ),这不仅体现在它可以处理使用UTF-8编码的字符串,就连它的源码文件格式都是使用的UTF-8编码。Go语言做到了真正的国际化! +Go 语言支持交叉编译,比如说你可以在运行 Linux 系统的计算机上开发运行下 Windows 下运行的应用程序。这是第一门完全支持 UTF-8 的编程语言( ***译者注:.NET好像也支持吧?*** ),这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化! ##1.2.6 语言的用途 -Go语言被设计成一门应用于搭载Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。 +Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。 -Go语言一个非常好的目标就是实现所谓的复杂事件处理([CEP](http://en.wikipedia.org/wiki/Complex_event_processing)),这项技术要求海量并行支持,高度的抽象化和高性能。当我们进入到物联网时代,CEP必然会成为人们关注的焦点。 +Go 语言一个非常好的目标就是实现所谓的复杂事件处理([CEP](http://en.wikipedia.org/wiki/Complex_event_processing)),这项技术要求海量并行支持,高度的抽象化和高性能。当我们进入到物联网时代,CEP 必然会成为人们关注的焦点。 -但是Go语言同时也是一门可以用于实现一般目标的语言,例如对于文本的处理,前端展现,甚至像使用脚本一样使用它。 +但是 Go 语言同时也是一门可以用于实现一般目标的语言,例如对于文本的处理,前端展现,甚至像使用脚本一样使用它。 -值得注意的是,因为垃圾回收和自动内存分配的原因,Go语言不适合用来开发对实时性要求很高的软件。 +值得注意的是,因为垃圾回收和自动内存分配的原因,Go 语言不适合用来开发对实时性要求很高的软件。 -越来越多的谷歌内部的大型分布式应用程序都开始使用Go语言来开发,例如谷歌地球的一部分代码就是由Go语言完成的。 +越来越多的谷歌内部的大型分布式应用程序都开始使用 Go 语言来开发,例如谷歌地球的一部分代码就是由 Go 语言完成的。 -如果你想知道一些其它组织使用Go语言开发的实际应用项目,你可以到这个页面进行查看:[http://go-lang.cat-v.org/organizations-using-go](http://go-lang.cat-v.org/organizations-using-go)。出于隐私保护的考虑,许多公司的项目都没有展示在这个页面。我们将会在第21章讨论到一个使用Go语言开发的大型存储区域网络(SAN)案例。 +如果你想知道一些其它组织使用Go语言开发的实际应用项目,你可以到这个页面进行查看:[http://go-lang.cat-v.org/organizations-using-go](http://go-lang.cat-v.org/organizations-using-go)。出于隐私保护的考虑,许多公司的项目都没有展示在这个页面。我们将会在第 21 章讨论到一个使用 Go 语言开发的大型存储区域网络(SAN)案例。 -在Chrome浏览器中内置了一款Go语言的编译器用于本地客户端(NaCl( ***为什么我觉得这是"钠"?*** )),这很可能会被用于在Chrome OS中执行Go语言开发的应用程序。 +在 Chrome 浏览器中内置了一款 Go 语言的编译器用于本地客户端(NaCl( ***为什么我觉得这是"钠"?*** )),这很可能会被用于在 Chrome OS 中执行 Go 语言开发的应用程序。 -Go语言可以在Inter或ARM处理器上运行,因此它也可以在安卓系统下运行,例如Nexus系列的产品。 +Go 语言可以在 Inter 或 ARM 处理器上运行,因此它也可以在安卓系统下运行,例如 Nexus 系列的产品。 -在 Google App Engine 中使用Go语言:2011年5月5日,官方发布了用于开发运行在 Google App Engine 上的Web应用的 Go SDK,在此之前,开发者们只能选择使用Python或者Java。这主要是 David Symonds 和 Nigel Tao 努力的成果。目前最新的稳定版是基于r60.3的SDK 1.6.1,于2011年12月13日发布。当前Go语言的稳定版本是Go 1( ***译者注:目前最新的稳定版是Go1.1*** )。 +在 Google App Engine 中使用 Go 语言:2011年5月5日,官方发布了用于开发运行在 Google App Engine 上的 Web 应用的 Go SDK,在此之前,开发者们只能选择使用 Python 或者 Java。这主要是 David Symonds 和 Nigel Tao 努力的成果。目前最新的稳定版是基于 r60.3 的SDK 1.6.1,于 2011 年 12 月 13 日发布。当前 Go 语言的稳定版本是 Go 1( ***译者注:目前最新的稳定版是Go1.1*** )。 ##1.2.7 关于特性丢失 -许多能够在大多数面向对象语言中使用的特性Go语言都没有支持,但其中的一部分可能会在未来被支持。 +许多能够在大多数面向对象语言中使用的特性 Go 语言都没有支持,但其中的一部分可能会在未来被支持。 - 为了简化设计,不支持函数重载和操作符重载 -- 为了避免在C/C++开发中的一些Bug和混乱,不支持隐式转换 -- Go语言通过另一种途径实现面向对象设计(第10-11章)来放弃类和类型的继承 -- 尽管在接口的使用方面(第11章)可以实现类似变体类型的功能,但本身不支持变体类型 +- 为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换 +- Go 语言通过另一种途径实现面向对象设计(第 10 - 11 章)来放弃类和类型的继承 +- 尽管在接口的使用方面(第 11 章)可以实现类似变体类型的功能,但本身不支持变体类型 - 不支持动态加载代码 - 不支持动态链接库 - 不支持泛型 -- 通过 `recover` 和 `panic` 来替代异常机制(第13.2-3节) +- 通过 `recover` 和 `panic` 来替代异常机制(第 13.2 - 3 节) - 不支持断言 - 不支持静态变量 -关于Go语言开发团队对于这些方面的讨论,你可以通过这个页面查看:[http://golang.org/doc/go_faq.html](http://golang.org/doc/go_faq.html) +关于 Go 语言开发团队对于这些方面的讨论,你可以通过这个页面查看:[http://golang.org/doc/go_faq.html](http://golang.org/doc/go_faq.html) -##1.2.8 使用Go语言编程 -如果你有其它语言的编程经历(面向对象编程语言,如:Java,C#,Object-C,Python,Ruby),在你进入到Go语言的世界之后,你将会像迷恋你的X语言一样无法自拔。Go语言使用了与其它语言不同的设计模式,所以当你尝试将你的X语言的代码迁移到Go语言时,你将会非常失望,所以你需要从头开始,用Go的理念来思考。 +##1.2.8 使用 Go 语言编程 +如果你有其它语言的编程经历(面向对象编程语言,如:Java、C#、Object-C、Python、Ruby),在你进入到 Go 语言的世界之后,你将会像迷恋你的 X 语言一样无法自拔。Go 语言使用了与其它语言不同的设计模式,所以当你尝试将你的X语言的代码迁移到 Go 语言时,你将会非常失望,所以你需要从头开始,用 Go 的理念来思考。 -如果你在至高点使用Go的理念来重新审视和分析一个问题,你通常会找到一个适用于Go语言的优雅的解决方案。 +如果你在至高点使用 Go 的理念来重新审视和分析一个问题,你通常会找到一个适用于 Go 语言的优雅的解决方案。 ##1.2.9 小结 -这里列举一些Go语言的必杀技: +这里列举一些 Go 语言的必杀技: - 简化问题,易于学习 - 内存管理,简洁语法,易于使用 @@ -135,4 +135,4 @@ Go语言可以在Inter或ARM处理器上运行,因此它也可以在安卓系 ##链接 - [目录](directory.md) - 上一节:[起源与发展](01.1.md) -- 下一章:[安装与运行环境](02.1.md) \ No newline at end of file +- 下一章:[安装与运行环境](02.1.md) diff --git a/eBook/02.1.md b/eBook/02.1.md index be3638c..3a4afe5 100644 --- a/eBook/02.1.md +++ b/eBook/02.1.md @@ -3,7 +3,7 @@ 这里还有一些其它的学习资源噢~ - - [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第六课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture6/lecture6.md) + - [《Go 编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第六课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture6/lecture6.md) - [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang) 神马?你说你不想学习?那好吧,去逛逛论坛看看行情也行~ @@ -12,4 +12,4 @@ - [Go语言学习园地](http://studygolang.com/) - [Golang中国](http://golang.tc) -#2.1 平台与架构 \ No newline at end of file +#2.1 平台与架构 diff --git a/eBook/directory.md b/eBook/directory.md index afb0440..ddfa041 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -1,7 +1,7 @@ #目录 - [前言](preface.md) -## 第一部分:学习Go语言 +## 第一部分:学习 Go 语言 - 第1章:Go语言的起源,发展与普及 - 1.1 [起源与发展](01.1.md) - 1.2 [语言的主要特性与发展的环境和影响因素](01.2.md) @@ -19,10 +19,10 @@ - 第10章:结构(struct)与方法(method) - 第11章:接口(interface)与反射(reflection) -##第三部分:Go高级编程 +##第三部分:Go 高级编程 - 第12章:读写数据 - 第13章:错误处理与测试 -- 第14章:Goroutines 与 Channels +- 第14章:goroutine 与 channel - 第15章:网络、模版与网页应用 ##第四部分:实际应用 @@ -35,7 +35,7 @@ ##附录 - A 代码引用 -- B 有趣的Go引用 +- B 有趣的 Go 引用 - C 代码示例列表 - D 书中的包引用 - E 书中的工具引用 @@ -43,4 +43,4 @@ - G 习题答案 - H 参考文献 -##索引 \ No newline at end of file +##索引 diff --git a/eBook/images/1.2.Go_logo.jpg b/eBook/images/1.2.Go_logo.jpg index f3637a245730d5b2254dc5ec0da8c1da71d327f6..ba4093ac15b4465baf5ecce992e75552e27a2b7f 100644 GIT binary patch literal 24198 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 NC-3~@1JM4x_%B4c=D+{| literal 24957 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