mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:06:41 +08:00
Reformat
This commit is contained in:
34
README.md
34
README.md
@@ -1,35 +1,34 @@
|
||||
《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 语言版本进行修改。
|
||||
|
||||
该翻译版本已获得原作者(Ivo Balbaert)本人授权,并表示支持开源事业的发展!
|
||||
|
||||
##翻译进度
|
||||
5.1 [if-else 结构](eBook/05.1.md)
|
||||
## 翻译进度
|
||||
|
||||
##支持本书
|
||||
如果你喜欢本书《Go入门指南》,你可以参与到本书的翻译或纠正工作中来,具体请联系【无闻 E-mail:joe2010xtmf#163.com】,一同完善本书并帮助壮大 Go 语言在国内的学习群体,给大家提供更好的学习资源。
|
||||
2.1 [平台与架构](eBook/02.1.md)
|
||||
|
||||
##交流
|
||||
欢迎大家加入QQ群:259316004(不要被群名字迷惑了,这里牛人可多了)
|
||||
## 支持本书
|
||||
|
||||
Golang中文社区:[mygolang.com](http://mygolang.com)
|
||||
如果你喜欢本书 《Go入门指南》,你可以参与到本书的翻译或纠正工作中来,具体请联系【无闻 E-mail:joe2010xtmf#163.com】,一同完善本书并帮助壮大 Go 语言在国内的学习群体,给大家提供更好的学习资源。
|
||||
|
||||
Go语言学习园地:[studygolang.com](http://studygolang.com/)
|
||||
## 交流社区
|
||||
|
||||
Golang中国:[golangtc.com](http://www.golangtc.com/)
|
||||
参见 [Go 语言学习资料与社区索引](https://github.com/Unknwon/go-study-index)。
|
||||
|
||||
### 新人守则
|
||||
|
||||
###新人守则
|
||||
- 2012 年 3 月 28 日以前的博文中的内容基本过时,不要再看
|
||||
- 符合等式 ***百度+思考+失败+翻墙+谷歌+尝试=解决*** 的问题最好不要发问
|
||||
- 不要问 Go 现在的发展前景如何
|
||||
- 不要问学习 Go 语言能不能找到工作
|
||||
- 不要问现在 Go 语言有哪些实际应用
|
||||
|
||||
##致谢
|
||||
## 致谢
|
||||
|
||||
- 本书原作者:Ivo Balbaert
|
||||
- 协助或参与翻译:
|
||||
- [zhanming](https://github.com/zhanming)
|
||||
@@ -37,13 +36,16 @@ Golang中国:[golangtc.com](http://www.golangtc.com/)
|
||||
- [everyx](https://github.com/everyx)
|
||||
- [chidouhu](https://github.com/chidouhu)
|
||||
|
||||
##授权许可
|
||||
## 授权许可
|
||||
|
||||
除特别声明外,本书中的内容使用 [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 许可协议)。
|
||||
|
||||
##捐助译者
|
||||
## 捐助译者
|
||||
|
||||
如果您觉得本书翻译确实不错,并认为译者的努力值得肯定,可以通过 [此链接](https://me.alipay.com/obahua) 为译者提供小额捐助,以资鼓励。
|
||||
|
||||
##开始阅读
|
||||
## 开始阅读
|
||||
|
||||
[前言](./eBook/preface.md)
|
||||
|
||||
想读书的人,不会找不到[目录](eBook/directory.md) :)
|
||||
想读书的人,不会找不到 [目录](eBook/directory.md) :)
|
||||
|
@@ -1,11 +1,12 @@
|
||||
#1.1 起源与发展
|
||||
# 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 语言的设计思想。
|
||||
|
||||
*这是一个由计算机领域“发明之父”所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非常深刻的见解*
|
||||
**这是一个由计算机领域“发明之父”所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非常深刻的见解**
|
||||
|
||||

|
||||
|
||||
图1.1 Go语言设计者:Griesemer、Thompson 和 Pike
|
||||
图 1.1 Go 语言设计者:Griesemer、Thompson 和 Pike
|
||||
|
||||
在 2008 年年中,Go 语言的设计工作接近尾声,一些员工开始以全职工作状态投入到这个项目的编译器和运行实现上。Ian Lance Taylor 也加入到了开发团队中,并于 2008 年 5 月创建了一个 gcc 前端。
|
||||
|
||||
@@ -17,7 +18,7 @@ Russ Cox 加入开发团队后着手语言和类库方面的开发,也就是 G
|
||||
|
||||
在 Go 语言在 2010 年 1 月 8 日被 [Tiobe](http://www.tiobe.com)(闻名于它的编程语言流行程度排名)宣布为“2009 年年度语言”后,引起各界很大的反响。目前 Go 语言在这项排名中的最高记录是在 2010 年 2 月创下的第13名,流行程度 1778%。
|
||||
|
||||
###时间轴:
|
||||
### 时间轴:
|
||||
|
||||
- 2007 年 9 月 21 日:雏形设计
|
||||
- 2009 年 11 月 10日:首次公开发布
|
||||
@@ -27,7 +28,7 @@ Russ Cox 加入开发团队后着手语言和类库方面的开发,也就是 G
|
||||
|
||||
从 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 语言的官方网站是 [http://golang.org](http://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)。
|
||||
|
||||
@@ -49,9 +50,10 @@ Go 编程语言的维基百科:[http://en.wikipedia.org/wiki/Go_(programming_l
|
||||
|
||||
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` 安装到你的本地机器上。对于中文读者,可以访问该指南的[中文版本](http://go-tour-zh.appsp0t.com/),或通过命令 `go install https://bitbucket.org/mikespook/go-tour-zh/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)
|
||||
- 上一部分:[前言](preface.md)
|
||||
- 下一节: [语言的主要特性与发展的环境和影响因素](01.2.md)
|
||||
|
@@ -1,6 +1,8 @@
|
||||
#1.2 语言的主要特性与发展的环境和影响因素
|
||||
##1.2.1 影响 Go 语言发展的早期编程语言
|
||||
正如“21 世纪的 C 语言”这句话所说,Go 语言并不是凭空而造的,而是和 C++、Java 和 C# 一样属于 C 系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入到 Go 语言当中。
|
||||
# 1.2 语言的主要特性与发展的环境和影响因素
|
||||
|
||||
## 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 类似的机制。
|
||||
|
||||
@@ -12,14 +14,16 @@
|
||||
|
||||

|
||||
|
||||
图1.3 其它编程语言对 Go 语言的影响
|
||||
图 1.3 其它编程语言对 Go 语言的影响
|
||||
|
||||
##1.2.2 为什么要创造一门编程语言
|
||||
- C/C++的发展速度无法跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程语言,因此人们需要一门新的系统编程语言来弥补这个空缺,尤其是在计算机信息时代。
|
||||
## 1.2.2 为什么要创造一门编程语言
|
||||
|
||||
- C/C++ 的发展速度无法跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程语言,因此人们需要一门新的系统编程语言来弥补这个空缺,尤其是在计算机信息时代。
|
||||
- 对比计算机性能的提升,软件开发领域不被认为发展地足够快或者比硬件发展更加成功(有许多项目均以失败告终),同时应用程序的体积始终在不断地扩大,这就迫切地需要一门具备更高层次概念的低级语言来突破现状。
|
||||
- 在 Go 语言出现之前,开发者们总是面临非常艰难的抉择,究竟是使用执行速度快但是编译速度并不理想的语言(如:C++),还是使用编译速度较快但执行效率不佳的语言(如:.NET、Java),或者说开发难度较低但执行速度一般的动态语言呢?显然,Go 语言在这 3 个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发。
|
||||
|
||||
##1.2.3 Go 语言的发展目标
|
||||
## 1.2.3 Go 语言的发展目标
|
||||
|
||||
Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。
|
||||
|
||||
因此,Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。
|
||||
@@ -44,14 +48,15 @@ Go 语言还能够在运行时进行反射相关的操作。
|
||||
|
||||
使用 `go install` 能够很轻松地对第三方包进行部署。
|
||||
|
||||
此外,Go 语言还支持调用由 C 语言编写的海量库文件(第3.9节),从而能够将过去开发的软件进行快速迁移。
|
||||
此外,Go 语言还支持调用由 C 语言编写的海量库文件(第 3.9 节),从而能够将过去开发的软件进行快速迁移。
|
||||
|
||||
## 1.2.4 指导设计原则
|
||||
|
||||
##1.2.4 指导设计原则
|
||||
Go语言通过减少关键字的数量(25 个)来简化编码过程中的混乱和复杂度。干净、整齐和简洁的语法也能够提高程序的编译速度,因为这些关键字在编译过程中少到甚至不需要符号表来协助解析。
|
||||
|
||||
这些方面的工作都是为了减少编码的工作量,甚至可以与 Java 的简化程度相比较。
|
||||
|
||||
Go 语言有一种极简抽象艺术家的感觉,因为它只提供了一到两种方法来解决某个问题,这使得开发者们的代码都非常容易阅读和理解。众所周知,代码的可读性是软件工程里最重要的一部分( ***译者注:代码是写给人看的,不是写给机器看的*** )。
|
||||
Go 语言有一种极简抽象艺术家的感觉,因为它只提供了一到两种方法来解决某个问题,这使得开发者们的代码都非常容易阅读和理解。众所周知,代码的可读性是软件工程里最重要的一部分( **译者注:代码是写给人看的,不是写给机器看的** )。
|
||||
|
||||
这些设计理念没有建立其它概念之上,所以并不会因为牵扯到一些概念而将某个概念复杂化,他们之间是相互独立的。
|
||||
|
||||
@@ -61,7 +66,8 @@ Go 语言有一套完整的编码规范,你可以在 [Go 语言编码规范](h
|
||||
|
||||
[LALR](http://en.wikipedia.org/wiki/LALR_parser) 是 Go 语言的语法标准,你也可以在 `src/cmd/gc/go.y` 中查看到,这种语法标准在编译时不需要符号表来协助解析。
|
||||
|
||||
##1.2.5 语言的特性
|
||||
## 1.2.5 语言的特性
|
||||
|
||||
Go 语言从本质上(程序和结构方面)来实现并发编程。
|
||||
|
||||
因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。
|
||||
@@ -76,9 +82,10 @@ Go 语言使用静态类型,所以它是类型安全的一门语言,加上
|
||||
|
||||
Go 语言其实也有一些动态语言的特性(通过关键字 `var`),所以它对那些逃离 Java 和 .Net 世界而使用 Python、Ruby、PHP 和 JavaScript 的开发者们也具有很大的吸引力。
|
||||
|
||||
Go 语言支持交叉编译,比如说你可以在运行 Linux 系统的计算机上开发运行下 Windows 下运行的应用程序。这是第一门完全支持 UTF-8 的编程语言( ***译者注:.NET好像也支持吧?*** ),这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化!
|
||||
Go 语言支持交叉编译,比如说你可以在运行 Linux 系统的计算机上开发运行下 Windows 下运行的应用程序。这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化!
|
||||
|
||||
## 1.2.6 语言的用途
|
||||
|
||||
##1.2.6 语言的用途
|
||||
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
|
||||
|
||||
Go 语言一个非常好的目标就是实现所谓的复杂事件处理([CEP](http://en.wikipedia.org/wiki/Complex_event_processing)),这项技术要求海量并行支持,高度的抽象化和高性能。当我们进入到物联网时代,CEP 必然会成为人们关注的焦点。
|
||||
@@ -91,13 +98,14 @@ Go 语言一个非常好的目标就是实现所谓的复杂事件处理([CEP]
|
||||
|
||||
如果你想知道一些其它组织使用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 语言可以在 Intel 或 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.2.1*** )。
|
||||
|
||||
## 1.2.7 关于特性丢失
|
||||
|
||||
##1.2.7 关于特性丢失
|
||||
许多能够在大多数面向对象语言中使用的特性 Go 语言都没有支持,但其中的一部分可能会在未来被支持。
|
||||
|
||||
- 为了简化设计,不支持函数重载和操作符重载
|
||||
@@ -113,12 +121,14 @@ Go 语言可以在 Intel 或 ARM 处理器上运行,因此它也可以在安
|
||||
|
||||
关于 Go 语言开发团队对于这些方面的讨论,你可以通过这个页面查看:[http://golang.org/doc/go_faq.html](http://golang.org/doc/go_faq.html)
|
||||
|
||||
##1.2.8 使用 Go 语言编程
|
||||
## 1.2.8 使用 Go 语言编程
|
||||
|
||||
如果你有其它语言的编程经历(面向对象编程语言,如:Java、C#、Object-C、Python、Ruby),在你进入到 Go 语言的世界之后,你将会像迷恋你的 X 语言一样无法自拔。Go 语言使用了与其它语言不同的设计模式,所以当你尝试将你的X语言的代码迁移到 Go 语言时,你将会非常失望,所以你需要从头开始,用 Go 的理念来思考。
|
||||
|
||||
如果你在至高点使用 Go 的理念来重新审视和分析一个问题,你通常会找到一个适用于 Go 语言的优雅的解决方案。
|
||||
|
||||
##1.2.9 小结
|
||||
## 1.2.9 小结
|
||||
|
||||
这里列举一些 Go 语言的必杀技:
|
||||
|
||||
- 简化问题,易于学习
|
||||
@@ -132,7 +142,8 @@ Go 语言可以在 Intel 或 ARM 处理器上运行,因此它也可以在安
|
||||
- 文档全面
|
||||
- 免费开源
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 上一节:[起源与发展](01.1.md)
|
||||
- 下一章:[安装与运行环境](02.1.md)
|
||||
|
@@ -1,7 +1,8 @@
|
||||
#目录
|
||||
# 目录
|
||||
- [前言](preface.md)
|
||||
|
||||
## 第一部分:学习 Go 语言
|
||||
|
||||
- 第1章:Go 语言的起源,发展与普及
|
||||
- 1.1 [起源与发展](01.1.md)
|
||||
- 1.2 [语言的主要特性与发展的环境和影响因素](01.2.md)
|
||||
@@ -25,7 +26,8 @@
|
||||
- 3.8 [Go 性能说明](03.8.md)
|
||||
- 3.9 [与其它语言进行交互](03.9.md)
|
||||
|
||||
##第二部分:语言的核心结构与技术
|
||||
## 第二部分:语言的核心结构与技术
|
||||
|
||||
- 第4章:基本结构和基本数据类型
|
||||
- 4.1 [文件名、关键字与标识符](04.1.md)
|
||||
- 4.2 [Go 程序的基本结构和要素](04.2.md)
|
||||
@@ -50,13 +52,15 @@
|
||||
- 第10章:结构(struct)与方法(method)
|
||||
- 第11章:接口(interface)与反射(reflection)
|
||||
|
||||
##第三部分:Go 高级编程
|
||||
## 第三部分:Go 高级编程
|
||||
|
||||
- 第12章:读写数据
|
||||
- 第13章:错误处理与测试
|
||||
- 第14章:goroutine 与 channel
|
||||
- 第15章:网络、模版与网页应用
|
||||
|
||||
##第四部分:实际应用
|
||||
## 第四部分:实际应用
|
||||
|
||||
- 第16章:常见的陷阱与错误
|
||||
- 第17章:模式
|
||||
- 第18章:出于性能考虑的实用代码片段
|
||||
@@ -64,7 +68,8 @@
|
||||
- 第20章:Go 语言在 Google App Engine 的使用
|
||||
- 第21章:实际部署案例
|
||||
|
||||
##附录
|
||||
## 附录
|
||||
|
||||
- A 代码引用
|
||||
- B 有趣的 Go 引用
|
||||
- C 代码示例列表
|
||||
@@ -74,4 +79,4 @@
|
||||
- G 习题答案
|
||||
- H 参考文献
|
||||
|
||||
##索引
|
||||
## 索引
|
@@ -1,5 +1,5 @@
|
||||
#前言
|
||||
###***用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐趣***
|
||||
# 前言
|
||||
### 用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐趣
|
||||
|
||||
对于学习 Go 编程语言的爱好者来说,这本书无疑是最适合你的一本书籍,这里包含了当前最全面的学习资源。本书通过对官方的在线文档、名人博客、书籍、相关文章以及演讲的资料收集和整理,并结合我自身在软件工程、编程语言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类来进行讲解。
|
||||
|
||||
@@ -17,19 +17,19 @@ Go 语言出现的目的是希望在编程领域创造最实用的方式来进
|
||||
|
||||
这本书是为那些想要学习 Go 这门全新的,迷人的和充满希望的编程语言的开发者量身定做的。当然,你在学习 Go 语言之前需要具备一些关于编程的基础知识和经验,并且拥有合适的学习环境,但你并不需要对 C 或者 Java 或其它类似的语言有非常深入的了解。
|
||||
|
||||
对于那些熟悉 C 或者面向对象编程语言的开发者,我们将会在本书中用 Go 和一些编程语言的相关概念进行比较(书中会使用大家所熟知的缩写“OO”来表示面向对象)。
|
||||
对于那些熟悉 C 或者面向对象编程语言的开发者,我们将会在本书中用 Go 和一些编程语言的相关概念进行比较(书中会使用大家所熟知的缩写 “OO” 来表示面向对象)。
|
||||
|
||||
本书将会从最基础的概念讲起,同时也会讨论一些类似在应用 goroutine 和 channel 时有多少种不同的模式,如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用模板来开发Web应用这些高级概念和技巧。
|
||||
|
||||
在本书的第一部分,我们将会讨论 Go 语言的起源(第1章),以及如何安装 Go 语言(第2章)和开发环境(第3章)。
|
||||
在本书的第一部分,我们将会讨论 Go 语言的起源(第 1 章),以及如何安装 Go 语言(第 2 章)和开发环境(第 3 章)。
|
||||
|
||||
在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第4,7,8章),控制结构(第5章),函数(第6章),结构与方法(第10章)和接口(第11章)。我们会对 Go 语言的函数式和面向对象编程进行透彻的讲解,包括如何使用 Go 语言来构造大型项目(第9章)。
|
||||
在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第 4、7、8 章),控制结构(第 5 章),函数(第 6 章),结构与方法(第 10 章)和接口(第 11 章)。我们会对 Go 语言的函数式和面向对象编程进行透彻的讲解,包括如何使用 Go 语言来构造大型项目(第 9 章)。
|
||||
|
||||
在本书的第三部分,你将会学习到如何处理不同格式的文件(第12章)和如何在 Go 语言中巧妙地使用错误处理机制(第13章)。然后我们会对 Go 语言中最值得称赞的设计 goroutine 和 channel 进行并发和多核应用的基本技巧的讲解(第14章)。最后,我们会讨论如何将 Go 语言应用到分布式和Web应用中的相关网络技巧(第15章)。
|
||||
在本书的第三部分,你将会学习到如何处理不同格式的文件(第 1 2章)和如何在 Go 语言中巧妙地使用错误处理机制(第 13 章)。然后我们会对 Go 语言中最值得称赞的设计 goroutine 和 channel 进行并发和多核应用的基本技巧的讲解(第 14 章)。最后,我们会讨论如何将 Go 语言应用到分布式和 Web 应用中的相关网络技巧(第 15 章)。
|
||||
|
||||
我们会在本书的第四部分向你展示许多 Go 语言的开发模式和一些编码规范,以及一些非常有用的代码片段(第18章)。在前面章节完成对所有的 Go 语言技巧的学习之后,你将会学习如何构造一个完整 Go 语言项目(第19章),然后我们会介绍一些关于 Go 语言在云(Google App Engine)方面的应用(第20章)。在本书的最后一章(第21章),我们会讨论一些在全世界范围内已经将 Go 语言投入实际开发的公司和组织。本书将会在最后给出一些对 Go 语言爱好者的引用,Go 相关包和工具的参考,以及章节练习的答案和所有参考资源和文献的清单。
|
||||
我们会在本书的第四部分向你展示许多 Go 语言的开发模式和一些编码规范,以及一些非常有用的代码片段(第 18 章)。在前面章节完成对所有的 Go 语言技巧的学习之后,你将会学习如何构造一个完整 Go 语言项目(第 19 章),然后我们会介绍一些关于 Go 语言在云(Google App Engine)方面的应用(第 20 章)。在本书的最后一章(第 21 章),我们会讨论一些在全世界范围内已经将 Go 语言投入实际开发的公司和组织。本书将会在最后给出一些对 Go 语言爱好者的引用,Go 相关包和工具的参考,以及章节练习的答案和所有参考资源和文献的清单。
|
||||
|
||||
Go 语言有一个被称之为“没有废物”的宗旨,就是将一切没有必要的东西都去掉,不能去掉的就无底线地简化,同时追求最大程度的自动化。他完美地诠释了敏捷编程的KISS秘诀:短小精悍!
|
||||
Go 语言有一个被称之为 “没有废物” 的宗旨,就是将一切没有必要的东西都去掉,不能去掉的就无底线地简化,同时追求最大程度的自动化。他完美地诠释了敏捷编程的 KISS 秘诀:短小精悍!
|
||||
|
||||
Go 语言通过改善或去除在 C、C++ 或 Java 中的一些所谓“开放”特性来让开发者们的工作更加便利。这里只举例其中的几个,比如对于变量的默认初始化,内存分配与自动回收,以及更简洁却不失健壮的控制结构。同时我们也会发现 Go 语言旨在减少不必要的编码工作,这使得 Go 语言的代码更加简洁,从而比传统的面向对象语言更容易阅读和理解。
|
||||
|
||||
@@ -43,16 +43,15 @@ Go 语言通过改善或去除在 C、C++ 或 Java 中的一些所谓“开放
|
||||
|
||||
本书会尽可能地将前后章节的内容联系起来,当然这也同时要求你通过学习不同的知识来对一个问题提出尽可能多的解决方案。记住,学习一门新语言的最佳方式就是实践,运行它的代码,修改并尝试更多的方案。因此,你绝对不可以忽略书中的 130 个代码练习,这将对你学习好 Go 语言有很大的帮助。比如,我们就为斐波那契算法提供了 13 个不同的版本,而这些版本都使用了不同的概念和技巧。
|
||||
|
||||
你可以通过访问本书的[官方网站](https://sites.google.com/site/thewaytogo2012/)下载书中的代码,并获得有关本书的勘误情况和内容更新。
|
||||
你可以通过访问本书的 [官方网站](https://sites.google.com/site/thewaytogo2012/) 下载书中的代码,并获得有关本书的勘误情况和内容更新。
|
||||
|
||||
为了让你在成为 Go 语言大师的道路上更加顺利,我们会专注于一些特别的章节以提供 Go 语言开发模式的最佳实践,同时也会帮助初学者逃离一些语言的陷阱。第 18 章可以作为你在开发时的一个参考手册,因为当中包含了众多的有价值的代码片段以及相关的解释说明。
|
||||
|
||||
最后要说明的是,你可以通过完整的索引来快速定位你需要阅读的章节。书中所有的代码都在 Go1 版本下测试通过。( ***译者注:所有代码经作者同意将会根据需要进行相关修改以在 Go1.1 版本下运行*** )
|
||||
最后要说明的是,你可以通过完整的索引来快速定位你需要阅读的章节。书中所有的代码都在 Go1 版本下测试通过。( **译者注:所有代码经作者同意将会根据需要进行相关修改以在 Go1.2 版本下运行** )
|
||||
|
||||
这里有一段来自在 C++、Java 和 Python 领域众所周知的专家 bruce Eckel 的评论:
|
||||
这里有一段来自在 C++、Java 和 Python 领域众所周知的专家 Bruce Eckel 的评论:
|
||||
|
||||
“作为一个有着 C/C++ 背景的开发者,我在使用 Go 语言时仿佛呼吸到了新鲜空气一般,令人心旷神怡。我认为使用 Go 语言进行系统编程开发比使用 C++ 有着更显著的优势,因为它在解决一些很难用 C++ 解决的问题的同时,让我的工作变得更加高效。我并不是说 C++ 的存在是一个错误,相反地,我认为这是历史发展的必然结果。当我深陷在 C
|
||||
语言这门略微比汇编语言好一点的泥潭时,我坚信任何语言的构造都不可能支持大型项目的开发。像垃圾回收或并发语言支持这类东西,在当时都是极其荒谬的主意,根本没有人在乎。C++ 向大型项目开发迈出了重要的第一步,带领我们走进这个广袤无垠的世界。很庆幸 Stroustrup 做了让 C++ 兼容 C 语言以能够让其编译 C 程序这个正确的决定。我们当时需要 C++ 的出现。”
|
||||
“作为一个有着 C/C++ 背景的开发者,我在使用 Go 语言时仿佛呼吸到了新鲜空气一般,令人心旷神怡。我认为使用 Go 语言进行系统编程开发比使用 C++ 有着更显著的优势,因为它在解决一些很难用 C++ 解决的问题的同时,让我的工作变得更加高效。我并不是说 C++ 的存在是一个错误,相反地,我认为这是历史发展的必然结果。当我深陷在 C 语言这门略微比汇编语言好一点的泥潭时,我坚信任何语言的构造都不可能支持大型项目的开发。像垃圾回收或并发语言支持这类东西,在当时都是极其荒谬的主意,根本没有人在乎。C++ 向大型项目开发迈出了重要的第一步,带领我们走进这个广袤无垠的世界。很庆幸 Stroustrup 做了让 C++ 兼容 C 语言以能够让其编译 C 程序这个正确的决定。我们当时需要 C++ 的出现。”
|
||||
|
||||
“之后我们学到了更多。我们毫无疑问地接受了垃圾回收,异常处理和虚拟机这些当年人们认为只有疯子才会想的东西。C++ 的复杂程度(新版的 C++ 甚至更加复杂)极大了影响了软件开发的高效性,这使得它再也不再适合这个时代。人们不再像过往那样认同在 C++ 中兼容使用 C 语言的方法,认为这些工作只是在浪费时间,牺牲人们的努力。就在此时,Go 语言已经成功地解决了 C++ 中那些本打算解决却未能解决的关键问题。”
|
||||
|
||||
@@ -60,6 +59,7 @@ Go 语言通过改善或去除在 C、C++ 或 Java 中的一些所谓“开放
|
||||
|
||||
欢迎来到 Go 语言开发的奇妙世界!
|
||||
|
||||
##链接
|
||||
## 链接
|
||||
|
||||
- [目录](directory.md)
|
||||
- 下一部分: [Go 语言的起源,发展与普及](01.1.md)
|
||||
|
Reference in New Issue
Block a user