Go语言圣经是由美国作者艾伦 A.A.多诺万(Alan A.A.Donovan)和《C程序设计语言》的作者布莱恩 W.柯尼汉(Brian W.Kernighan)所编著的一本关于Go语言编程的权威著作。Go语言可以在不损失应用程序性能的情况下降低代码的复杂性,提高编程效率,适合开发大型软件,有望成为主流的编程语言。

Go语言圣经(The Go Programming Language) PDF中文版

Go语言圣经主要内容

第一章包含了本教程的基本结构,通过十几个程序介绍了用Go语言如何实现类似读写文件、文本格式化、创建图像、网络客户端和服务器通讯等日常工作。

第二章描述了Go语言程序的基本元素结构、变量、新类型定义、包和文件、以及作用域等概念。第三章讨论了数字、布尔值、字符串和常量,并演示了如何显示和处理Unicode字符。第四章描述了复合类型,从简单的数组、字典、切片到动态列表。第五章涵盖了函数,并讨论了错误处理、panic和recover,还有defer语句。

第一章到第五章是基础部分,主流命令式编程语言这部分都类似。个别之处,Go语言有自己特色的语法和风格,但是大多数程序员能很快适应。其余章节是Go语言特有的:方法、接口、并发、包、测试和反射等语言特性。

Go语言的面向对象机制与一般语言不同。它没有类层次结构,甚至可以说没有类;仅仅通过组合(而不是继承)简单的对象来构建复杂的对象。方法不仅可以定义在结构体上, 而且, 可以定义在任何用户自定义的类型上;并且, 具体类型和抽象类型(接口)之间的关系是隐式的,所以很多类型的设计者可能并不知道该类型到底实现了哪些接口。方法在第六章讨论,接口在第七章讨论。

第八章讨论了基于顺序通信进程(CSP)概念的并发编程,使用goroutines和channels处理并发编程。第九章则讨论了传统的基于共享变量的并发编程。

第十章描述了包机制和包的组织结构。这一章还展示了如何有效地利用Go自带的工具,使用单个命令完成编译、测试、基准测试、代码格式化、文档以及其他诸多任务。

第十一章讨论了单元测试,Go语言的工具和标准库中集成了轻量级的测试功能,避免了强大但复杂的测试框架。测试库提供了一些基本构件,必要时可以用来构建复杂的测试构件。

第十二章讨论了反射,一种程序在运行期间审视自己的能力。反射是一个强大的编程工具,不过要谨慎地使用;这一章利用反射机制实现一些重要的Go语言库函数, 展示了反射的强大用法。第十三章解释了底层编程的细节,在必要时,可以使用unsafe包绕过Go语言安全的类型系统。

Go语言圣经目录

第1章综述1

1.1Hello,World1

1.2命令行参数4

1.3查找重复行8

1.4GIF动画13

1.5获取一个URL15

1.6并发获取多个URL17

1.7实现一个Web服务器19

1.8杂项23

第2章程序结构27

2.1名字27

2.2声明28

2.3变量30

2.4赋值36

2.5类型声明39

2.6包和文件41

2.7作用域45

第3章基本数据类型51

3.1整数51

3.2浮点数56

3.3复数61

3.4布尔量63

3.5字符串64

3.6常量75

第4章复合类型81

4.1数组81

4.2切片84

4.3键值对93

4.4结构体99

4.5JSON107

4.6文本和HTML模板113

第5章函数119

5.1函数声明119

5.2递归121

5.3多返回值124

5.4错误127

5.5作为值的函数132

5.6匿名函数135

5.7变参函数142

5.8延后函数调用143

5.9崩溃148

5.10恢复151

第6章方法155

6.1方法声明155

6.2带有指针接收器的方法158

6.3包含嵌入结构体的复合类型161

6.4作为值和表达式的方法164

6.5示例:位向量类型165

6.6封装168

第7章接口171

7.1作为规约的接口171

7.2接口类型174

7.3接口约定的达成175

7.4使用flag.Value进行标志位分析179

7.5作为值的接口181

7.6使用sort.Interface进行排序186

7.7http.Handler接口191

7.8错误接口196

7.9示例:表达式评估器197

7.10类型断言205

7.11使用类型断言分辨错误206

7.12使用接口类型断言查询行为208

7.13按类型的程序分支210

7.14示例:基于标记符号的XML解码213

7.15几句建议216

第8章goroutine和信道217

8.1goroutine217

8.2示例:并发时钟服务器219

8.3示例:并发回声服务器222

8.4信道225

8.5并行循环234

8.6示例:并发Web爬虫239

8.7使用select实现多工244

8.8示例:并发目录遍历247

8.9取消执行251

8.10示例:聊天服务器253

第9章使用共享变量实现并发257

9.1竞险257

9.2互斥量:sync.Mutex262

9.3读写互斥量:sync.RWMutex266

9.4内存同步267

9.5缓式初始化:sync.Once268

9.6竞险检测器271

9.7示例:并发无阻塞式高速缓存272

9.8goroutine和线程280

第10章包和go工具283

10.1概述283

10.2导入路径284

10.3包声明285

10.4导入声明285

10.5空导入286

10.6包和命名289

10.7go工具290

第11章测试301

11.1gotest工具302

11.2测试函数302

11.3覆盖率318

11.4性能基准函数321

11.5性能剖析323

11.6示例函数326

第12章反射329

12.1为什么会引入反射概念329

12.2reflect.Type和reflect.Value330

12.3递归值输出Display333

12.4示例:对S-表达式编码338

12.5使用reflect.Value给变量设置值341

12.6示例:对S-表达式解码344

12.7访问结构体域标签348

12.8列出类型的方法351

12.9几句忠告352

第13章低阶程序设计353

13.1unsafe.Sizeof、Alignof和Offsetof354

13.2unsafe.Pointer356

13.3示例:深等价358

13.4使用cgo调用C代码361

13.5再来几句忠告366