This commit is contained in:
Unknown
2014-04-07 19:37:53 -04:00
parent 70283577b1
commit 5957b043dc
5 changed files with 82 additions and 62 deletions

View File

@@ -8,21 +8,19 @@
该翻译版本已获得原作者Ivo Balbaert本人授权并表示支持开源事业的发展
## 翻译进度
5.1 [if-else 结构](eBook/05.1.md)
2.1 [平台与架构](eBook/02.1.md)
## 支持本书
如果你喜欢本书 《Go入门指南》你可以参与到本书的翻译或纠正工作中来具体请联系【无闻 E-mailjoe2010xtmf#163.com】一同完善本书并帮助壮大 Go 语言在国内的学习群体,给大家提供更好的学习资源。
##交流
欢迎大家加入QQ群259316004不要被群名字迷惑了这里牛人可多了
## 交流社区
Golang中文社区[mygolang.com](http://mygolang.com)
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 现在的发展前景如何
@@ -30,6 +28,7 @@ Golang中国[golangtc.com](http://www.golangtc.com/)
- 不要问现在 Go 语言有哪些实际应用
## 致谢
- 本书原作者Ivo Balbaert
- 协助或参与翻译:
- [zhanming](https://github.com/zhanming)
@@ -38,12 +37,15 @@ Golang中国[golangtc.com](http://www.golangtc.com/)
- [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) :)

View File

@@ -1,7 +1,8 @@
# 1.1 起源与发展
Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。该项目的三位领导者均是著名的 IT 工程师Robert Griesemer参与开发 Java HotSpot 虚拟机Rob PikeGo 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9Inferno 操作系统和 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)
@@ -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)。
@@ -52,6 +53,7 @@ Go 语言相关资源的搜索引擎页面:[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` 进行安装。
## 链接
- [目录](directory.md)
- 上一部分:[前言](preface.md)
- 下一节: [语言的主要特性与发展的环境和影响因素](01.2.md)

View File

@@ -1,5 +1,7 @@
# 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 类似的机制。
@@ -15,11 +17,13 @@
图 1.3 其它编程语言对 Go 语言的影响
## 1.2.2 为什么要创造一门编程语言
- C/C++ 的发展速度无法跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程语言,因此人们需要一门新的系统编程语言来弥补这个空缺,尤其是在计算机信息时代。
- 对比计算机性能的提升,软件开发领域不被认为发展地足够快或者比硬件发展更加成功(有许多项目均以失败告终),同时应用程序的体积始终在不断地扩大,这就迫切地需要一门具备更高层次概念的低级语言来突破现状。
- 在 Go 语言出现之前开发者们总是面临非常艰难的抉择究竟是使用执行速度快但是编译速度并不理想的语言C++),还是使用编译速度较快但执行效率不佳的语言(如:.NET、Java或者说开发难度较低但执行速度一般的动态语言呢显然Go 语言在这 3 个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发。
## 1.2.3 Go 语言的发展目标
Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。
因此Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。
@@ -47,11 +51,12 @@ Go 语言还能够在运行时进行反射相关的操作。
此外Go 语言还支持调用由 C 语言编写的海量库文件(第 3.9 节),从而能够将过去开发的软件进行快速迁移。
## 1.2.4 指导设计原则
Go语言通过减少关键字的数量25 个)来简化编码过程中的混乱和复杂度。干净、整齐和简洁的语法也能够提高程序的编译速度,因为这些关键字在编译过程中少到甚至不需要符号表来协助解析。
这些方面的工作都是为了减少编码的工作量,甚至可以与 Java 的简化程度相比较。
Go 语言有一种极简抽象艺术家的感觉,因为它只提供了一到两种方法来解决某个问题,这使得开发者们的代码都非常容易阅读和理解。众所周知,代码的可读性是软件工程里最重要的一部分( ***译者注:代码是写给人看的,不是写给机器看的*** )。
Go 语言有一种极简抽象艺术家的感觉,因为它只提供了一到两种方法来解决某个问题,这使得开发者们的代码都非常容易阅读和理解。众所周知,代码的可读性是软件工程里最重要的一部分( **译者注:代码是写给人看的,不是写给机器看的** )。
这些设计理念没有建立其它概念之上,所以并不会因为牵扯到一些概念而将某个概念复杂化,他们之间是相互独立的。
@@ -62,6 +67,7 @@ Go 语言有一套完整的编码规范,你可以在 [Go 语言编码规范](h
[LALR](http://en.wikipedia.org/wiki/LALR_parser) 是 Go 语言的语法标准,你也可以在 `src/cmd/gc/go.y` 中查看到,这种语法标准在编译时不需要符号表来协助解析。
## 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 语言的用途
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 关于特性丢失
许多能够在大多数面向对象语言中使用的特性 Go 语言都没有支持,但其中的一部分可能会在未来被支持。
- 为了简化设计,不支持函数重载和操作符重载
@@ -114,11 +122,13 @@ Go 语言可以在 Intel 或 ARM 处理器上运行,因此它也可以在安
关于 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 的理念来思考。
如果你在至高点使用 Go 的理念来重新审视和分析一个问题,你通常会找到一个适用于 Go 语言的优雅的解决方案。
## 1.2.9 小结
这里列举一些 Go 语言的必杀技:
- 简化问题,易于学习
@@ -133,6 +143,7 @@ Go 语言可以在 Intel 或 ARM 处理器上运行,因此它也可以在安
- 免费开源
## 链接
- [目录](directory.md)
- 上一节:[起源与发展](01.1.md)
- 下一章:[安装与运行环境](02.1.md)

View File

@@ -2,6 +2,7 @@
- [前言](preface.md)
## 第一部分:学习 Go 语言
- 第1章Go 语言的起源,发展与普及
- 1.1 [起源与发展](01.1.md)
- 1.2 [语言的主要特性与发展的环境和影响因素](01.2.md)
@@ -26,6 +27,7 @@
- 3.9 [与其它语言进行交互](03.9.md)
## 第二部分:语言的核心结构与技术
- 第4章基本结构和基本数据类型
- 4.1 [文件名、关键字与标识符](04.1.md)
- 4.2 [Go 程序的基本结构和要素](04.2.md)
@@ -51,12 +53,14 @@
- 第11章接口interface与反射reflection
## 第三部分Go 高级编程
- 第12章读写数据
- 第13章错误处理与测试
- 第14章goroutine 与 channel
- 第15章网络、模版与网页应用
## 第四部分:实际应用
- 第16章常见的陷阱与错误
- 第17章模式
- 第18章出于性能考虑的实用代码片段
@@ -65,6 +69,7 @@
- 第21章实际部署案例
## 附录
- A 代码引用
- B 有趣的 Go 引用
- C 代码示例列表

View File

@@ -1,5 +1,5 @@
# 前言
###***用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐趣***
### 用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐趣
对于学习 Go 编程语言的爱好者来说,这本书无疑是最适合你的一本书籍,这里包含了当前最全面的学习资源。本书通过对官方的在线文档、名人博客、书籍、相关文章以及演讲的资料收集和整理,并结合我自身在软件工程、编程语言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类来进行讲解。
@@ -23,7 +23,7 @@ Go 语言出现的目的是希望在编程领域创造最实用的方式来进
在本书的第一部分,我们将会讨论 Go 语言的起源(第 1 章),以及如何安装 Go 语言(第 2 章)和开发环境(第 3 章)。
在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第478章),控制结构(第5章),函数(第6结构与方法第10章和接口第11章。我们会对 Go 语言的函数式和面向对象编程进行透彻的讲解,包括如何使用 Go 语言来构造大型项目(第9章)。
在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第 4、7、8 章),控制结构(第 5 章),函数(第 6 章),结构与方法(第 10 章)和接口(第 11 章)。我们会对 Go 语言的函数式和面向对象编程进行透彻的讲解,包括如何使用 Go 语言来构造大型项目(第 9 章)。
在本书的第三部分,你将会学习到如何处理不同格式的文件(第 1 2章和如何在 Go 语言中巧妙地使用错误处理机制(第 13 章)。然后我们会对 Go 语言中最值得称赞的设计 goroutine 和 channel 进行并发和多核应用的基本技巧的讲解(第 14 章)。最后,我们会讨论如何将 Go 语言应用到分布式和 Web 应用中的相关网络技巧(第 15 章)。
@@ -47,12 +47,11 @@ Go 语言通过改善或去除在 C、C++ 或 Java 中的一些所谓“开放
为了让你在成为 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++ 中那些本打算解决却未能解决的关键问题。”
@@ -61,5 +60,6 @@ Go 语言通过改善或去除在 C、C++ 或 Java 中的一些所谓“开放
欢迎来到 Go 语言开发的奇妙世界!
## 链接
- [目录](directory.md)
- 下一部分: [Go 语言的起源,发展与普及](01.1.md)