目录
本书源码
第1章Go语言简介
1.1Go语言的发布策略
1.2Go语言的兼容性保证
1.3Go语言规范
1.3.1花括号
1.3.2min和max
1.4Go程序的代码组织形式
1.5交叉编译
第2章标识符与关键字
2.1标识符
2.1.1空白标识符
2.1.2预定义标识符
2.1.3限定标识符
2.2关键字
2.3标识符的作用域
2.4标识符的导出性
第3章常量与变量
3.1常量字面量
3.1.1数值字面量
3.1.2字符字面量
3.1.3字符串字面量
3.2常量
3.3变量
第4章表达式与语句
4.1表达式
4.1.1组合字面量
4.1.2方法表达式
4.1.3方法值表达式
4.1.4类型断言表达式
4.1.5类型转换表达式
4.2运算符
4.2.1运算符优先级
4.2.2算术运算符
4.2.3比较运算符
4.2.4逻辑运算符
4.3语句
4.3.1赋值语句
4.3.2if语句
4.3.3for语句
4.3.4switch语句
4.3.5select语句
4.3.6表达式语句
4.3.7go语句
4.3.8终结语句
第5章类型系统
5.1定义类型
5.2类型别名
5.3类型匹配
5.4可赋值性
5.5可转换性
5.6零值
第6章包
6.1包声明
6.2包导入
6.3循环导入
6.3.1合并包
6.3.2提取依赖共性
6.3.3转移功能
6.4包初始化
6.5程序初始化
第7章字符串
7.1字节序列
7.2字符串字面量
7.2.1解释型字面量
7.2.2原始字面量
7.3字符码位与rune
7.4不可变性
7.4.1不可变的优点
7.4.2不可变的缺点
7.5UTF8
7.5.1Unicode与UTF8
7.5.2UTF8编码方式
7.6UTF8编程实例
第8章数组和切片
8.1数组
8.1.1数组基本用法
8.1.2数组的内存布局
8.1.3数组的值与指针
8.2切片
8.2.1切片的定义
8.2.2切片的值
8.2.3make()函数
8.2.4copy()函数
8.2.5append()函数
8.2.6append()函数的注意事项
8.2.7标准库slices包
8.3数组和切片的遍历
第9章结构体
9.1结构体的字段
9.1.1字段的类型
9.1.2字段的名称
9.1.3字段的标签
9.2结构体的值
9.3结构体的方法
9.4结构体的嵌入式字段
第10章map
10.1map的基本用法
10.1.1map的基本操作
10.1.2map的初始化
10.1.3map的遍历
10.2map的特点
10.3map的实现
10.3.1单独链表法
10.3.2充分简化的map
10.4map的值
10.5哈希表的扩展应用
10.5.1文件哈希表结构
10.5.2文件哈希表的实现
第11章Channel
11.1chan的基本用法
11.1.1chan的创建
11.1.2chan的阻塞
11.1.3chan的方向
11.1.4chan的关闭
11.2select语句
11.2.1解除阻塞
11.2.2default分支
11.2.3超时控制
11.2.4适应过慢的消费者
11.3chan的值
11.4chan编程实例
第12章指针
12.1指针的本质
12.1.1指针与数据
12.1.2指针变量和多级指针
12.1.3隐式间接引用
12.1.4切片与数组指针
12.1.5字面量的指针
12.1.6零大小变量的指针
12.2指针的必要性
12.2.1Go语言的复制语义
12.2.2指针的引用语义
12.3逃逸分析
12.4栈复制
第13章函数与方法
13.1函数的参数
13.1.1变长参数
13.1.2参数的求值顺序
13.2函数的返回值
13.3函数类型
13.4匿名函数
13.4.1匿名函数示例
13.4.2闭包
13.4.3闭包共享状态
13.5高阶函数
13.5.1函数作为输入
13.5.2函数作为输出
13.6方法
13.6.1方法集
13.6.2指针接收者
13.6.3方法表达式
13.6.4方法值
13.7defer语句
13.7.1defer的用法
13.7.2defer的注意事项
第14章接口
14.1基本接口
14.1.1对行为的抽象
14.1.2调用双方的合约
14.1.3接口的嵌入
14.1.4接口与多态
14.1.5接口的值
14.1.6接口类型转换
14.1.7nil接口
14.1.8鸭子类型的缺点
14.2泛型接口
第15章error
15.1error示例
15.2生成error值
15.3包装error值
15.4解包error值
15.5非错误error
第16章Goroutine
16.1创建Goroutine
16.2Goroutine的调度
16.2.1厨师与客户的例子
16.2.2线程与Goroutine
16.2.3调度器工作原理
16.3panic与recover
16.3.1panic的成因
16.3.2panic的传播
16.4等待Goroutine结束
16.4.1使用WaitGroup
16.4.2使用chan
第17章Context
17.1取消信号
17.2Context简介
17.3Context的用法
17.3.1标准库中的Context
17.3.2Context编程实例
17.4Context Value
17.4.1Context Value简介
17.4.2标准库中的Context Value
17.4.3Context Value编程实例
第18章并发编程
18.1Goroutine简介
18.2同步
18.2.1chan作为信号
18.2.2chan传递数据
18.2.3chan控制并发量
18.2.4Mutex手工同步
18.2.5Once确保只运行一次
18.2.6Cond通知或广播
18.2.7atomic原子操作
18.2.8Goroutine正常退出
18.2.9同步的本质
18.3并发同步编程实例
第19章泛型
19.1泛型与抽象
19.2Go泛型
19.2.1类型参数和实例化
19.2.2类型约束
19.2.3类型推导
19.3泛型类型系统
19.3.1实例化类型
19.3.2核心类型
19.3.3类型参数
19.4迭代器
19.4.1迭代器的基本用法
19.4.2迭代器的实现原理
19.4.3拉取型迭代器
19.4.4迭代器的应用
19.5泛型之前的“泛型”
19.6泛型实践
19.6.1看懂泛型代码
19.6.2编写泛型代码
19.7泛型方法的困境
第20章测试
20.1功能测试
20.1.1功能测试的例子
20.1.2T的常用方法
20.1.3表驱动测试
20.2测试覆盖
20.3性能测试
20.3.1性能测试的例子
20.3.2B的常用方法
20.4模糊测试
20.4.1模糊测试的例子
20.4.2F的常用方法
20.4.3普通运行模糊测试
20.5子测试
20.6并行测试
20.6.1T的并行
20.6.2B的并行
20.7示例代码
20.8go test的运行模式
20.9TestMain()和命令行参数
20.10专有测试
第21章模块
21.1模块的基本结构
21.2模块的请求模式
21.2.1代理模式
21.2.2直接模式
21.3模块的版本
21.3.1语义化版本
21.3.2伪版本
21.3.3主版本后缀
21.3.4版本标注
21.3.5最低版本选择
21.3.6撤回模块
21.3.7废弃模块
21.4模块的校验
21.4.1go.sum文件
21.4.2校验和数据库
21.5工作区
21.6私有模块
21.6.1私有代理服务所有模块
21.6.2私有代理服务私有模块
21.6.3直接访问私有模块
21.6.4传递登录凭证
21.7Go模块常用命令
21.7.1初始化模块
21.7.2添加或更新依赖
21.7.3查询可用升级
21.7.4整理go.mod文件
21.7.5安装可执行程序
第22章文档注释
22.1包文档
22.2命令程序文档
22.3类型文档
22.4函数文档
22.5常量和变量文档
22.6文档注释的语法
22.6.1段落
22.6.2标题
22.6.3链接
22.6.4文档链接
22.6.5列表
22.6.6代码块
后记
参考文献
