重磅推荐
【编辑推荐】

Go是谷歌公司为了解决重大问题而设计的一种小型编程语言。完成大型项目需要大型团队,而大型团队中团队成员的经验水平往往各不相同。Go是一种小巧却功能强大的语言,它能够被任何人理解和使用,无论其经验如何。 快速、现代的编程语言能让业余爱好者、初学者和专业人员都受益。你需要的正是这样的语言。本书针对Go语言基础知识提供了实操性的指导,使你能够掌握Go语法,使用类型和函数,探索状态和并发等更重要的概念,并通过大量练习来巩固学到的知识。 本书包括以下内容: ●切片、接口、指针和并发等重要语言概念; ●地鼠太空航行、火星探测器、文本加密以及人类繁衍模拟等7个单元实验; ●无须安装即可在Go Playground中运行的示例。 本书面向所有熟悉计算机编程以及渴望获得这一技能的人。


【内容简介】

《Go语言趣学指南》是一本面向Go语言初学者的书,循序渐进地介绍了使用Go语言所必需的知识,展示了非常多生动有趣的例子,并通过提供大量练习来加深读者对书中所述内容的理解。本书共分8个单元,分别介绍变量、常量、分支和循环等基础语句,整数、浮点数和字符串等常用类型,类型、函数和方法,数组、切片和映射,结构和接口,指针、nil和错误处理方法,并发和状态保护,并且每个单元都包含相应的章节和单元测试。 《Go语言趣学指南》适合对初学Go语言有不同需求的程序员阅读。无论是刚开始学习Go语言的新手,还是想要回顾Go语言基础知识的Go语言使用者,只要是想用Go做开发,无论是开发小型脚本还是大型程序,《Go语言趣学指南》都会非常有帮助。


【作者简介】

内森·扬曼(Nathan Youngman)既是一位自学成才的网络开发者,也是一位终生学习概念的践行者。他是加拿大埃德蒙顿市Go聚会的组织者、Canada Learning Code的辅导教师以及狂热的地鼠玩偶摄影爱好者。 罗杰·佩珀(Roger Peppé)是一位Go贡献者,他维护着一系列开源Go项目,负责组织英国纽卡斯尔市的Go聚会,并且当前正在承担Go云端基础设施软件的相关工作。


【媒体评论】

“本书的组织方式对快速学习Go 语言来说堪称完美,对那些没有经验的程序员尤为有用。” —— Mario Carrion,MEREDITH公司 “这是一本注重实践的书。书中包含的大量示例将帮助你学习Go 语言的核心知识, 并教会你常见的Go 语言习惯用法。” —— Ulises Flynn,NAV公司 “这是一本关于Go 语言的好书。为初学者而写,但是对经验丰富的开发者也会有所帮助。” —— Mika?l Dautrey,ISITIX公司 “成功攀登Go 语言高峰的*步。” ——


【目录】

目 录

第0单元 入门

第 1章 各就各位,预备,Go! 3

1.1 什么是Go 4

1.2 Go Playground 6

1.3 包和函数 7

1.4 *允许的大括号放置风格 8

1.5 小结 9

实验:playground.go 10

第 1单元 命令式编程

第 2章 被美化的计算器 13

2.1 执行计算 13

2.2 格式化输出 15

2.3 常量和变量 16

2.4 走捷径 18

2.4.1 一次声明多个变量 18

2.4.2 增量并赋值操作符 18

2.5 数字游戏 19

2.6 小结 20

实验:malacandra.go 21

第3章 循环和分支 22

3.1 真或假 23

3.2 比较 24

3.3 使用if实现分支判断 25

3.4 逻辑运算符 26

3.5 使用switch实现分支判断 28

3.6 使用循环实现重复执行 30

3.7 小结 31

实验:guess.go 32

第4章 变量作用域 33

4.1 审视作用域 34

4.2 简短声明 35

4.3 作用域的范围 37

4.4 小结 39

实验:random-dates.go 39

第5章 单元实验:前往火星的航行票 40

第 2单元 类型

第6章 实数 45

6.1 声明浮点类型变量 46

6.1.1 单精度浮点数 47

6.1.2 零值 47

6.2 打印浮点类型 48

6.3 浮点精确性 49

6.4 比较浮点数 51

6.5 小结 51

实验:piggy.go 52

第7章 整数 53

7.1 声明整数类型变量 54

7.1.1 为不同场合而设的整数类型 54

7.1.2 了解类型 56

7.2 为8位颜色使用uint8类型 56

7.3 整数回绕 58

7.3.1 聚焦二进制位 58

7.3.2 避免时间回绕 60

7.4 小结 61

实验:piggy.go 62

第8章 大数 63

8.1 击中天花板 63

8.2 big包 65

8.3 大小非同寻常的常量 66

8.4 小结 68

实验:cains.go 68

第9章 多语言文本 69

9.1 声明字符串变量 70

9.2 字符、代码点、符文和字节 71

9.3 拉弦 73

9.4 使用凯撒加密法处理字符 73

9.5 将字符串解码为符文 76

9.6 小结 77

实验:caesar.go 78

实验:international.go 78

第 10章 类型转换 79

10.1 类型不能混合使用 79

10.2 数字类型转换 81

10.3 类型转换的危险之处 82

10.4 字符串转换 83

10.5 转换布尔值 85

10.6 小结 86

实验:input.go 86

第 11章 单元实验:维吉尼亚加密法 87

实验:decipher.go 88

实验:cipher.go 89

第3单元 构建块

第 12章 函数 93

12.1 函数声明 94

12.2 编写函数 97

12.3 小结 99

实验:functions.go 99

第 13章 方法 100

13.1 声明新类型 101

13.2 引入自定义类型 102

13.3 通过方法为类型添加行为 103

13.4 小结 105

实验:methods.go 106

第 14章 一等函数 107

14.1 将函数赋值给变量 108

14.2 将函数传递给其他函数 109

14.3 声明函数类型 110

14.4 闭包和匿名函数 111

14.5 小结 113

实验:calibrate.go 114

第 15章 单元实验:温度表 115

第4单元 收集器

第 16章 劳苦功高的数组 119

16.1 声明数组并访问其元素 119

16.2 小心越界 121

16.3 使用复合字面量初始化数组 121

16.4 迭代数组 122

16.5 数组被复制 123

16.6 由数组组成的数组 125

16.7 小结 125

实验:chess.go 126

第 17章 切片:指向数组的窗口 127

17.1 切分数组 128

17.2 切片的复合字面量 130

17.3 切片的威力 130

17.4 带有方法的切片 132

17.5 小结 133

实验:terraform.go 133

第 18章 更大的切片 134

18.1 append函数 134

18.2 长度和容量 135

18.3 详解append函数 136

18.4 三索引切分操作 137

18.5 使用make函数对切片实行预分配 138

18.6 声明可变参数函数 139

18.7 小结 140

实验:capacity.go 140

第 19章 无所不能的映射 141

19.1 声明映射 142

19.2 映射不会被复制 143

19.3 使用make函数对映射实行预分配 144

19.4 使用映射进行计数 145

19.5 使用映射和切片实现数据分组 146

19.6 将映射用作集合 147

19.7 小结 148

实验:words.go 148

第 20章 单元实验:切片人生 150

20.1 开天辟地 150

20.1.1 观察世界 151

20.1.2 激活细胞 151

20.2 适者生存 152

20.2.1 存活还是死亡 152

20.2.2 统计邻近细胞 152

20.2.3 游戏逻辑 153

20.3 平行世界 153

第5单元 状态与行为

第 21章 结构 157

21.1 声明结构 157

21.2 通过类型复用结构 159

21.3 通过复合字面量初始化结构 159

21.4 结构被复制 161

21.5 由结构组成的切片 161

21.6 将结构编码为JSON 162

21.7 使用结构标签定制JSON 164

21.8 小结 165

实验:landing.go 165

第 22章 Go没有类 166

22.1 将方法绑定到结构 166

22.2 构造函数 168

22.3 类的替代品 169

22.4 小结 171

实验:landing.go 171

实验:distance.go 171

第 23章 组合与转发 173

23.1 合并结构 174

23.2 实现自动的转发方法 176

23.3 命名冲突 178

23.4 小结 180

实验:gps.go 180

第 24章 接口 181

24.1 接口类型 182

24.2 探索接口 185

24.3 满足接口 187

24.4 小结 189

实验:marshal.go 189

第 25章 单元实验:火星上的动物避难所 190

第6单元 深入Go语言

第 26章 关于指针的二三事 195

26.1 &和* 196

26.2 指针的作用就是指向 199

26.2.1 指向结构的指针 201

26.2.2 指向数组的指针 202

26.3 实现修改 203

26.3.1 将指针用作形参 203

26.3.2 指针接收者 204

26.3.3 内部指针 206

26.3.4 修改数组 207

26.4 隐式指针 208

26.4.1 映射也是指针 208

26.4.2 切片指向数组 208

26.5 指针和接口 209

26.6 明智地使用指针 210

26.7 小结 211

实验:turtle.go 211

第 27章 关于nil的纷纷扰扰 212

27.1 通向惊恐的nil指针 213

27.2 保护你的方法 214

27.3 nil函数值 216

27.4 nil切片 217

27.5 nil映射 218

27.6 nil接口 218

27.7 nil之外的另一个选择 219

27.8 小结 220

实验:knights.go 221

第 28章 孰能无过 222

28.1 处理错误 223

28.2 优雅的错误处理 224

28.2.1 文件写入 225

28.2.2 关键字defer 227

28.2.3 创造性的错误处理 228

28.3 新的错误 229

28.3.1 按需返回错误 231

28.3.2 自定义错误类型 232

28.4 不要惊恐 235

28.4.1 其他语言中的异常 235

28.4.2 如何引发惊恐 236

28.4.3 处理惊恐 237

28.5 小结 237

实验:url.go 238

第 29章 单元实验:数独规则 239

第7单元 并发编程

第30章 goroutine和并发 243

30.1 启动goroutine 244

30.2 不止一个goroutine 245

30.3 通道 247

30.4 使用select处理多个通道 249

30.5 阻塞和死锁 251

30.6 地鼠装配线 252

30.7 小结 256

实验:remove-identical.go 256

实验:split-words.go 256

第31章 并发状态 257

31.1 互斥锁 258

31.2 长时间运行的工作进程 262

31.3 小结 267

实验:positionworker.go 268

实验:rover.go 268

第32章 单元实验:寻找火星生命 269

32.1 可供活动的网格 269

32.2 报告发现 270

结语:何去何从 273

习题答案(网上下载)


返回顶部