第1章 认识Go语言 1
1.1Go语言简介 1
1.1.1Go语言简史 1
1.1.2Go语言特性 2
1.1.3谁适合使用Go语言 2
1.2Go语言的开发环境部署 3
1.2.1Go语言环境变量 3
1.2.2在Linux上安装Go语言环境 3
1.2.3在Mac OS上安装Go语言环境 5
1.2.4在Windows上安装Go语言环境 5
1.3Go语言的基本命令及使用 5
1.3.1GOROOT结构 6
1.3.2GOPATH结构 7
1.3.3Go语言命令行参数 8
1.3.4第一个Go语言程序 12
1.4Go语言的开发工具 14
1.4.1Code/Atom 14
1.4.2VIM-Go 17
1.4.3Gogland 18
1.4.4LiteIDE 18
1.4.5Cloud IDE 19
1.5本章小结 23
第2章 程序结构 24
2.1Go语言程序元素 24
2.1.1标识符 24
2.1.2关键字 25
2.1.3字面量 25
2.1.4分隔符 25
2.1.5运算符 26
2.1.6注释 27
2.2Go语言基本概念 28
2.2.1常量 28
2.2.2变量 32
2.3本章小结 37
第3章 基础数据类型 38
3.1整型 39
3.1.1整型的表示 39
3.1.2整型的运算 39
3.2浮点型 41
3.2.1浮点型的表示 41
3.2.2浮点型的运算 42
3.2.3复数 42
3.3字符与字符串 44
3.3.1字符串的表示 44
3.3.2操作字符串 46
3.3.3字符串格式化 60
3.4布尔型 61
3.4.1布尔型的表示 61
3.4.2布尔型的运算 62
3.5基本数据类型的扩展 63
3.5.1强制类型转换 63
3.5.2自定义类型 64
3.5.3类型别名 64
3.5.4指针 65
3.6本章小结 69
第4章 流程控制 70
4.1条件语句 70
4.1.1if判断 71
4.1.2if-else判断 71
4.1.3else-if判断 73
4.1.4初始化子语句 74
4.2选择语句 75
4.2.1switch语句 75
4.2.2switch初始化语句 78
4.2.3select语句 79
4.3循环语句 80
4.3.1for的子语句 81
4.3.2range子语句 82
4.4延迟语句 84
4.5标签 87
4.5.1break 87
4.5.2continue 89
4.5.3goto 90
4.6本章小结 91
第5章 函数 92
5.1认识函数 92
5.1.1函数的声明 92
5.1.2函数的参数 93
5.1.3函数的返回值 94
5.2函数的基础 95
5.2.1多返回值 96
5.2.2函数作为参数 97
5.2.3函数作为类型 98
5.2.4可变参数 99
5.2.5匿名函数与闭包 102
5.2.6递归函数 106
5.2.7内置函数 108
5.3函数进阶 108
5.3.1参数传递机制 108
5.3.2defer与跟踪 111
5.3.3错误与恢复 116
5.4本章小结 122
第6章 复合数据类型 123
6.1数组 123
6.1.1声明数组 123
6.1.2访问与修改 124
6.1.3多维数组 126
6.1.4将数组传递给函数 127
6.2切片 128
6.2.1创建数组切片 129
6.2.2切片的使用 131
6.2.3多维切片 137
6.2.4将切片传递给函数 137
6.3映射 138
6.3.1映射的实现 138
6.3.2映射的创建 139
6.3.3映射的使用 139
6.3.4将映射传递给函数 141
6.4本章小结 142
第7章 包 144
7.1包的基础 144
7.1.1包的结构 146
7.1.2包的导入 147
7.1.3包的使用 153
7.1.4Go语言工具箱 154
7.2自定义包 156
7.2.1包的制作 157
7.2.2特定平台的代码 157
7.2.3godoc生成文档 158
7.2.4包的打包与发布 159
7.2.5自定义包的导入 164
7.3本章小结 165
第8章 结构体与方法 166
8.1结构体 166
8.1.1结构体定义 166
8.1.2结构体使用 172
8.1.3带标签的结构体 175
8.1.4匿名字段和内嵌结构体 176
8.2类型系统 179
8.2.1用户自定义类型 179
8.2.2值语义和引用语义 182
8.3方法 184
8.3.1方法声明 184
8.3.2为类型添加方法 187
8.3.3工厂方法创建结构体 188
8.3.4基于指针对象的方法 190
8.3.5方法值和方法表达式 191
8.3.6方法和未导出字段 193
8.3.7嵌入类型的方法和继承 194
8.4本章小结 197
第9章 接口与反射 198
9.1接口 198
9.1.1接口是什么 199
9.1.2接口类型与约定 204
9.1.3接口实现 208
9.1.4嵌套接口 210
9.1.5接口赋值 211
9.1.6接口查询 213
9.1.7接口组合 214
9.2反射 215
9.2.1方法和类型的反射 215
9.2.2通过反射修改设置值 216
9.2.3反射结构 218
9.2.4Printf和反射 220
9.3本章小结 222
第10章 并发编程 223
10.1并发编程基础 223
10.1.1并发与并行 223
10.1.2指定使用核心数 225
10.2协程(goroutine) 227
10.2.1协程基础 228
10.2.2协程间通信 229
10.3通道(channel) 231
10.3.1基本语法 232
10.3.2select 232
10.3.3缓冲机制 233
10.3.4超时和计时器 234
10.3.5channel的传递 235
10.3.6单向channel 236
10.3.7关闭channel 237
10.4并发进阶 237
10.4.1多核并行化 237
10.4.2协程同步 239
10.4.3协程和恢复 242
10.5本章小结 243
第11章 网络编程 244
11.1Socket编程 244
11.1.1什么是Socket 244
11.1.2Dial()函数 246
11.1.3ICMP示例 247
11.1.4TCP Socket 249
11.1.5UDP Socket 253
11.2HTTP编程 255
11.2.1HTTP客户端 255
11.2.2HTTP服务器端 260
11.3RPC编程 262
11.3.1Go RPC 263
11.3.2HTTP RPC 263
11.3.3TCP RPC 266
11.3.4JSON RPC 268
11.3.5RPC接口 271
11.4数据库 272
11.4.1database/sql接口 272
11.4.2使用MySQL数据库 277
11.4.3使用SQLite数据库 280
11.4.4使用PostgreSQL数据库 282
11.4.5NoSQL数据库操作 286
11.5Go语言使用Cookie 287
11.5.1设置Cookie 287
11.5.2读取Cookie 288
11.6本章小结 288
第12章 I/O编程 289
12.1输入/输出 289
12.1.1io:基本I/O接口 289
12.1.2fmt:格式化I/O 292
12.1.3文本处理 298
12.2文件系统 298
12.2.1os:系统功能实现 298
12.2.2path:兼容路径操作 299
12.3数据结构与算法 303
12.3.1排序 304
12.3.2container 310
12.4本章小结 314
第13章 文件处理 315
13.1文件操作 315
13.1.1创建文件与查看状态 316
13.1.2重命名与移动 319
13.1.3打开与关闭 319
13.1.4删除与截断 321
13.1.5读写文件 321
13.1.6权限控制 325
13.1.7文件链接 328
13.2XML处理 330
13.2.1解析XML 330
13.2.2生成XML 333
13.3JSON处理 336
13.3.1解析JSON 336
13.3.2生成JSON 338
13.4日志记录 340
13.4.1Logrus 341
13.4.2Seelog 342
13.5压缩 343
13.5.1打包与解包 343
13.5.2压缩与解压 345
13.6本章小结 347
第14章 安全与测试 348
14.1安全 348
14.1.1安全相关的基础概念 348
14.1.2通信安全 350
14.2测试 354
14.2.1单元测试 354
14.2.2基准测试 362
14.3本章小结 368
第15章 内存管理 369
15.1内存分配 369
15.1.1内存管理基本概念 369
15.1.2逃逸分析 373
15.2TCMalloc 376
15.2.1整体结构 377
15.2.2小内存分配 378
15.2.3CentralCache 379
15.2.4大内存分配 381
15.3Mspan(内存管理器) 384
15.4垃圾回收 398
15.4.1标记清理算法 399
15.4.2标记实现 403
15.4.3清理 406
15.4.4监控 408
15.5本章小结 408