重磅推荐
【深度学习】

【编辑推荐】

国内知名Go语言技术布道者的再造之作

李响、谢孟军、刘奇、左玥、肖德时、Googol Lee、田琪等业内大咖倾心力捧

深入Go语言及其并发原理,挖出并发编程*实践,百样示例助你成为多核计算时代的Go程序高手


【内容简介】

本书首先介绍了Go语言的优秀特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据类型以及流程控制方法,接着阐述了与多进程编程和多线程编程有关的知识,然后重点介绍了goroutine、channel以及Go提供的传统同步方法,*后通过一个完整实例——网络爬虫框架进一步阐述Go语言的哲学和理念,同时分享作者在多年编程生涯中的一些见解和感悟。

与上一版相比,本书不仅基于Go 1.8对上一版进行了全面更新,而且更深入地描绘了Go运行时系统的内部机理,并且大幅改进了示例代码。

本书适用于有一定计算机编程基础的从业者以及对Go语言编程感兴趣的爱好者,非常适合作为Go语言编程进阶教程。


【作者简介】

郝林

从业12年有余的软件工匠,国内知名的Go语言技术布道者,Go语言北京用户组和GoHackers社群的发起人和组织者,多套免费在线Go语言教程的作者,深信Go语言在人工智能时代和机器人时代也能大放异彩的科技信徒。


【媒体评论】

“郝老师这一次改版,可谓更加详尽地解读了Go语言的很多细节,透彻地剖析了Go所涉及的编程思想,同时书中深入浅出地演示了丰富的Go应用实例。读完这本书,你不一定就能成为大牛,但如果你真的能把这本书读懂、吃透,那么你离Go高手肯定不远啦。”——谢孟军,GopherChina创始人

“Go是分布式数据库TiDB的*语言,向每一位想学习Go语言的程序员推荐这本书。”——刘奇,PingCAP联合创始人 & CEO

“Go语言真是越来越流行了!它能够胜任的技术领域一直在不断增多。这本书在国内起到了很大作用,能够深入理解Go语言的程序员变多了,公司招聘起来也更方便了。灵雀云的主力开发语言已经彻底转向了Go。”——左玥,灵雀云创始人 & CEO

“Go语言的掌握过程是一个渐进过程,需要一本实战型的百科全书来应对。我一直和团队推荐这本《Go并发编程实战》,反馈好评度高。现在第2版推出,继续强力推荐!” ——肖德时,数人云联合创始人 & CTO

“本书不仅介绍了Go的语法,还深入解释了Go语言实现并发的机制。读者跟着本书既可以学会Go语言,还可以学会怎样用Go语言写好并发程序。”——李兆海,资深Go程序开发者,Google SRE

“Go是一门简洁强大又不失灵活性的语言,在业界正得到越来越广泛的应用。本书系作者多年Go实践经验的总结,相信会帮助读者更好地使用该语言,并规避掉很多因使用不当造成的软件缺陷。”——田琪,*专家架构师


【目录】
第1章 初识Go语言 1

1.1 语言特性 1

1.2 安装和设置 2

1.3 工程结构 3

1.3.1 工作区 3

1.3.2 GOPATH 4

1.3.3 源码文件 5

1.3.4 代码包 8

1.4 标准命令简述 11

1.5 问候程序 13

1.6 小结 14

第2章 语法概览 15

2.1 基本构成要素 15

2.1.1 标识符 15

2.1.2 关键字 16

2.1.3 字面量 17

2.1.4 操作符 17

2.1.5 表达式 19

2.2 基本类型 20

2.3 高级类型 22

2.3.1 数组 23

2.3.2 切片 23

2.3.3 字典 24

2.3.4 函数和方法 25

2.3.5 接口 28

2.3.6 结构体 29

2.4 流程控制 30

2.4.1 代码块和作用域 30

2.4.2 if语句 32

2.4.3 switch语句 32

2.4.4 for语句 34

2.4.5 defer语句 36

2.4.6 panic和recover 38

2.5 聊天机器人 40

2.6 小结 44

第3章 并发编程综述 45

3.1 并发编程基础 45

3.1.1 串行程序与并发程序 46

3.1.2 并发程序与并行程序 46

3.1.3 并发程序与并发系统 47

3.1.4 并发程序的不确定性 47

3.1.5 并发程序内部的交互 47

3.2 多进程编程 48

3.2.1 进程 48

3.2.2 关于同步 55

3.2.3 管道 60

3.2.4 信号 65

3.2.5 socket 74

3.3 多线程编程 97

3.3.1 线程 98

3.3.2 线程的同步 107

3.4 多线程与多进程 125

3.5 多核时代的并发编程 126

3.6 小结 130

第4章 Go的并发机制 131

4.1 原理探究 131

4.1.1 线程实现模型 132

4.1.2 调度器 142

4.1.3 更多细节 158

4.2 goroutine 160

4.2.1 go语句与goroutine 160

4.2.2 主goroutine的运作 166

4.2.3 runtime包与goroutine 166

4.3 channel 169

4.3.1 channel的基本概念 169

4.3.2 单向channel 180

4.3.3 for语句与channel 184

4.3.4 select语句 185

4.3.5 非缓冲的channel 190

4.3.6 time包与channel 192

4.4 实战演练:载荷发生器 198

4.4.1 参数和结果 199

4.4.2 基本结构 201

4.4.3 初始化 206

4.4.4 启动和停止 212

4.4.5 调用器和功能测试 221

4.5 小结 231

第5章 同 步 232

5.1 锁的使用 232

5.1.1 互斥锁 232

5.1.2 读写锁 236

5.1.3 锁的完整示例 238

5.2 条件变量 244

5.3 原子操作 247

5.3.1 增或减 247

5.3.2 比较并交换 249

5.3.3 载入 250

5.3.4 存储 251

5.3.5 交换 251

5.3.6 原子值 252

5.3.7 应用于实际 256

5.4 只会执行一次 257

5.5 WaitGroup 258

5.6 临时对象池 262

5.7 实战演练——Concurrent Map 265

5.8 小结 280

第6章 网络爬虫框架设计和实现 281

6.1 网络爬虫与框架 281

6.2 功能需求和分析 283

6.3 总体设计 284

6.4 详细设计 286

6.4.1 基本数据结构 286

6.4.2 接口的设计 293

6.5 工具的实现 309

6.5.1 缓冲器 309

6.5.2 缓冲池 311

6.5.3 多重读取器 317

6.6 组件的实现 318

6.6.1 内部基础接口 319

6.6.2 组件注册器 321

6.6.3 下载器 323

6.6.4 分析器 325

6.6.5 条目处理管道 328

6.7 调度器的实现 329

6.7.1 基本结构 329

6.7.2 初始化 331

6.7.3 启动 333

6.7.4 停止 343

6.7.5 其他方法 344

6.7.6 总结 345

6.8 一个简单的图片爬虫 346

6.8.1 概述 346

6.8.2 命令参数 346

6.8.3 初始化调度器 348

6.8.4 监控调度器 354

6.8.5 启动调度器 364

6.9 扩展与思路 365

6.10 本章小结 368

附录A Go语言的学习资源 369






返回顶部