Go并发编程实战(第2版)首先介绍了Go语言的优秀特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据类型以及流程控制方法,接着阐述了与多进程编程和多线程编程有关的知识,然后重点介绍了goroutine、channel以及Go提供的传统同步方法,最后通过一个完整实例——网络爬虫框架进一步阐述Go语言的哲学和理念,同时分享作者在多年编程生涯中的一些见解和感悟。
与上一版相比,本书不仅基于Go 1.8对上一版进行了全面更新,而且更深入地描绘了Go运行时系统的内部机理,并且大幅改进了示例代码。
本书适用于有一定计算机编程基础的从业者以及对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