第1章 走进Go 1
1.1 Go编程语言概述 1
1.1.1 Go的历史 1
1.1.2 Go语言特性及应用场景 2
1.1.3 使用Go语言的项目 3
1.2 Go语言官方文档 4
1.3 学好Go的建议 5
1.4 常用软件及网站 6
1.5 小结 7
第2章 安装和运行Go 8
2.1 GOROOT和GOPATH 8
2.2 在Windows下安装Go 9
2.3 在Linux下安装Go 11
2.4 在Mac OS下安装Go 12
2.5 安装开发工具 13
2.5.1 GoLand下载 13
2.5.2 GoLand安装 13
2.5.3 GoLand使用 16
2.6 编写第一个Go程序 19
2.6.1 GoLand编写 19
2.6.2 文本编辑器编写 20
2.7 小结 21
第3章 基本变量与类型 22
3.1 Go语言变量 22
3.1.1 声明变量 22
3.1.2 初始化变量 23
3.1.3 变量值交换 25
3.1.4 匿名变量 26
3.2 Go语言数据类型 27
3.2.1 整型 27
3.2.2 浮点型 28
3.2.3 字符串 29
3.2.4 字符和转义字符 30
3.2.5 布尔型 31
3.2.6 数据类型判断 31
3.2.7 数据类型转换 32
3.3 指针 34
3.3.1 声明指针 34
3.3.2 取变量地址 34
3.3.3 获取指针所指向的内容 35
3.3.4 使用指针修改值 36
3.4 其他数据类型 37
3.5 小结 38
3.6 知识拓展 38
3.6.1 字符串的应用 38
3.6.2 Go语言注释 43
第4章 常量与运算符 44
4.1 常量 44
4.1.1 常量的定义 44
4.1.2 常量组的定义 45
4.1.3 常量枚举 46
4.2 运算符 47
4.2.1 算术运算符 47
4.2.2 比较运算符 49
4.2.3 赋值运算符 50
4.2.4 位运算符 51
4.2.5 逻辑运算符 52
4.2.6 其他运算符 53
4.3 小结 54
4.4 知识拓展 54
第5章 流程控制 56
5.1 if判断 56
5.2 循环控制 58
5.2.1 for循环 58
5.2.2 break跳出循环 59
5.2.3 continue继续循环 61
5.3 switch分支 61
5.4 goto跳转 63
5.5 小结 64
5.6 知识拓展 64
5.6.1 斐波那契数列 64
5.6.2 循环嵌套 67
第6章 Go语言内置容器 69
6.1 数组 69
6.1.1 声明数组 70
6.1.2 初始化数组 70
6.1.3 range关键字 71
6.1.4 遍历数组 72
6.2 切片 72
6.2.1 从数组生成一个新的切片 73
6.2.2 从切片生成一个新的切片 74
6.2.3 直接生成一个新的切片 75
6.2.4 为切片添加元素 77
6.2.5 从切片删除元素 79
6.2.6 遍历切片 80
6.3 映射 81
6.3.1 声明映射 81
6.3.2 初始化映射 82
6.3.3 遍历映射 83
6.3.4 从映射中删除键值对 84
6.4 小结 85
6.5 知识拓展 86
第7章 函数 90
7.1 声明函数 90
7.1.1 函数参数的简写 91
7.1.2 函数返回值的简写 91
7.1.3 带有变量名的返回值 92
7.2 使用函数 92
7.3 函数变量 93
7.4 可变参数 95
7.4.1 可变参数函数的使用 95
7.4.2 可变参数与内置函数 96
7.4.3 可变参数的传递 96
7.5 匿名函数和闭包 98
7.5.1 定义和使用匿名函数 98
7.5.2 闭包的定义 99
7.5.3 闭包的“记忆力” 99
7.6 延迟执行语句 101
7.7 小结 103
7.8 知识拓展 103
7.8.1 函数参数传递的本质 103
7.8.2 Go内置函数 106
第8章 包管理 109
8.1 工作区 109
8.1.1 工作区结构 109
8.1.2 GOPATH 110
8.1.3 GOROOT 112
8.1.4 GOBIN 112
8.2 包的声明 112
8.3 包的导入 113
8.3.1 导入声明 113
8.3.2 远程导入 114
8.3.3 别名导入 115
8.3.4 匿名导入 116
8.4 main包 117
8.5 包的初始化 118
8.6 包的命名 119
8.7 依赖包管理 120
8.8 Go语言命名规范 121
8.8.1 驼峰式命名法 121
8.8.2 导出标识符 122
8.9 小结 123
8.10 知识拓展 124
第9章 结构体 126
9.1 理解结构体 126
9.2 定义结构体 127
9.3 实例化结构体 128
9.3.1 标准实例化 128
9.3.2 new函数实例化 129
9.3.3 取地址实例化 129
9.3.4 访问成员 130
9.4 初始化结构体 131
9.4.1 键值对格式初始化 131
9.4.2 列表格式初始化 132
9.5 结构体方法 133
9.5.1 指针类型接收者 134
9.5.2 值类型接收者 135
9.6 结构体内嵌 136
9.6.1 初始化结构体内嵌 138
9.6.2 内嵌匿名结构体 139
9.7 匿名结构体 140
9.7.1 匿名结构体定义与初始化 140
9.7.2 匿名结构体的应用 142
9.8 小结 143
9.9 知识拓展 143
第10章 错误处理 147
10.1 错误处理的方式 147
10.2 自定义错误 148
10.2.1 错误类型 148
10.2.2 创建错误 149
10.2.3 自定义错误格式 149
10.3 Go语言宕机 150
10.4 宕机恢复 151
10.4.1 recover捕获宕机 151
10.4.2 recover应用 153
10.5 Go语言错误的应用 154
10.6 小结 155
10.7 知识拓展 156
第11章 文件操作 158
11.1 目录基本操作 158
11.1.1 列目录 159
11.1.2 创建目录 163
11.1.3 删除目录 166
11.2 文件基本操作 168
11.2.1 文件创建与打开 169
11.2.2 文件读取 171
11.2.3 文件写入 174
11.2.4 删除文件 177
11.3 处理JSON文件 178
11.3.1 编码JSON 179
11.3.2 解码JSON 182
11.4 小结 186
第12章 接口与类型 187
12.1 接口定义 187
12.1.1 接口的定义 187
12.1.2 鸭子类型 188
12.2 接口的创建与实现 189
12.2.1 接口创建 189
12.2.2 接口赋值 193
12.3 接口嵌入 196
12.4 空接口 199
12.4.1 将值保存到空接口 199
12.4.2 从空接口取值 200
12.4.3 空接口的常见使用 201
12.5 类型断言 203
12.5.1 ok-pattern 206
12.5.2 switch-type 207
12.6 小结 209
12.7 知识拓展 209
第13章 并发与通道 213
13.1 概述 213
13.1.1 并行与并发 214
13.1.2 Go并发优势 214
13.2 goroutine 215
13.2.1 goroutine定义 215
13.2.2 创建goroutine 216
13.2.3 main函数 218
13.2.4 使用匿名函数创建goroutine 220
13.2.5 runtime包 220
13.3 channel 225
13.3.1 channel类型 225
13.3.2 缓冲机制 227
13.3.3 close和range 229
13.3.4 单向channel 232
13.3.5 定时器 233
13.4 select 234
13.4.1 select作用 234
13.4.2 超时 236
13.4.3 死锁 237
13.5 小结 238
第14章 反射 239
14.1 反射定义 239
14.1.1 反射的定义 239
14.1.2 与其他语言的区别 239
14.2 基本用法 241
14.2.1 获取类型信息 243
14.2.2 获取类型的值 245
14.2.3 使用反射调用函数 246
14.3 对结构体的反射操作 248
14.3.1 获取结构体成员类型 248
14.3.2 获取结构体成员字段的值 250
14.3.3 反射执行结构体方法 251
14.4 反射三定律 252
14.4.1 接口到反射类型的转换 252
14.4.2 反射到接口类型的转换 253
14.4.3 修改反射类型对象 254
14.5 反射的性能 255
14.6 小结 257
第15章 Go命令行工具 258
15.1 编译相关指令 259
15.1.1 build 259
15.1.2 run 262
15.1.3 install 264
15.1.4 交叉编译 265
15.2 代码获取(get) 267
15.3 格式化代码(fmt) 268
15.4 注释文档(doc) 269
15.5 代码测试(test) 271
15.5.1 单元测试 271
15.5.2 基准测试 274
15.5.3 覆盖率测试 277
15.6 性能分析 278
15.6.1 安装Graphviz 278
15.6.2 通过文件方式 279
15.6.3 通过HTTP方式 281
15.7 小结 284
第16章 正则表达式 285
16.1 正则表达式介绍 285
16.2 正则表达式语法 286
16.2.1 普通字符 286
16.2.2 字符转义 288
16.2.3 元字符 288
16.2.4 限定符 290
16.2.5 定位符 290
16.2.6 分组构造 291
16.2.7 匹配模式 291
16.3 regexp包 292
16.3.1 MatchString函数 292
16.3.2 FindStringIndex函数 294
16.3.3 ReplaceAllString函数 295
16.4 小结 296
16.5 知识拓展 296
第17章 HTTP编程(上) 298
17.1 HTTP简介 298
17.1.1 HTTP协议 298
17.1.2 URL地址 300
17.1.3 Web工作方式 300
17.2 HTTP客户端 301
17.2.1 REST 301
17.2.2 Client和Request 302
17.2.3 发起GET请求 307
17.2.4 发起POST请求 312
17.3 爬虫框架gocolly 315
17.3.1 gocolly简介 316
17.3.2 实战爬取西刺代理IP 320
17.4 小结 324
17.5 知识拓展 324
第18章 HTTP编程(下) 327
18.1 错误处理的方式 327
18.1.1 最常见的Web服务端 328
18.1.2 请求方法 328
18.1.3 响应状态码 329
18.2 HTTP服务端 329
18.2.1 Server和Response 330
18.2.2 启动HTTP服务器 332
18.2.3 启动HTTPS服务器 333
18.2.4 静态文件 336
18.3 路由 338
18.4 中间件 341
18.5 Web框架gin 343
18.5.1 启动HTTP服务器 344
18.5.2 静态文件 344
18.5.3 路由 345
18.6 小结 347
18.7 知识拓展 347
第19章 Socket编程 350
19.1 计算机网络简介 350
19.1.1 OSI七层网络模型 350
19.1.2 TCP/IP协议 352
19.1.3 IPv4和IPv6 353
19.1.4 子网掩码 354
19.2 Socket基础 355
19.2.1 Socket简介 355
19.2.2 netcat工具简介 356
19.3 TCP编程 357
19.3.1 TCP简介 357
19.3.2 TCP客户端 359
19.3.3 TCP服务端 364
19.4 UDP编程 369
19.4.1 UDP简介 369
19.4.2 UDP客户端 369
19.4.3 UDP服务端 372
19.5 小结 376
19.6 知识拓展 377
第20章 数据库编程 381
20.1 MySQL简介 381
20.1.1 安装MySQL 382
20.1.2 MySQL常见命令 382
20.2 database/sql 383
20.3 数据库基本操作 384
20.3.1 连接数据库 384
20.3.2 创建数据表 386
20.3.3 插入数据 389
20.3.4 查询数据 392
20.3.5 更改数据 395
20.3.6 删除数据 397
20.3.7 MySQL事务 398
20.4 小结 401
20.5 知识拓展 401