图书目录

目录

本书源码

第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.5UTF8

7.5.1Unicode与UTF8

7.5.2UTF8编码方式

7.6UTF8编程实例

第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代码块

后记

参考文献