第1章 Go语言概述 1
1.1 Go语言简介 1
1.1.1 Go语言发展历史 1
1.1.2 Go语言的特点 1
1.2 Go的下载和安装 3
1.2.1 源码安装 3
1.2.2 标准包安装 4
1.2.3 第三方工具安装 10
1.3 Go基本命令及使用 11
1.3.1 Go常用命令 11
1.3.2 Go文档查看命令 12
1.3.3 其他命令 12
1.4 Go集成开发工具 13
1.4.1 LiteIDE 13
1.4.2 SublimeText 2 14
1.5 Go程序结构和设计过程 20
1.5.1 Go程序结构 20
1.5.2 Go程序设计过程 22
1.5.3 Go源程序语法要点 23
1.5.4 Go的注释方式 23
小结 24
习题 25
第2章 Go数据类型、运算符与表达式 26
2.1 常量、变量与命名规则 26
2.1.1 常量 26
2.1.2 变量 27
2.1.3 标识符与命名规则 28
2.2 基本数据类型 29
2.2.1 布尔型数据 29
2.2.2 整型数据 30
2.2.3 浮点型数据 32
2.2.4 复数 34
2.2.5 字节型数据 35
2.2.6 rune类型 36
2.2.7 uintptr类型 37
2.3 运算符与表达式 39
2.3.1 赋值运算符 39
2.3.2 算术运算符 40
2.3.3 关系运算符 41
2.3.4 逻辑运算符 42
2.3.5 位运算符 43
2.3.6 通道运算符 44
2.3.7 运算符的优先级和结合性 44
2.4 字符串 45
2.4.1 字符串定义 45
2.4.2 字符串操作 46
2.4.3 字符串遍历 47
2.5 常量的初始化规则 48
2.5.1 常量的类型 48
2.5.2 常量定义方法 49
2.5.3 常量的初始化规则 50
2.6 枚举 53
2.6.1 枚举类型的定义 53
2.6.2 iota使用规则 54
2.6.3 iota应用举例 54
2.7 变量的定义与声明 56
2.7.1 变量的类型 56
2.7.2 变量的类型零值 56
2.7.3 变量的作用域 58
2.7.4 变量的声明与赋值 59
2.8 类型别名 62
2.8.1 类型别名定义方式 62
2.8.2 中文类型名 62
2.9 类型转换 63
2.9.1 类型转换方法 63
2.9.2 类型兼容性 64
2.9.3 类型转换分类 64
小结 67
习题 68
第3章 Go顺序结构程序设计 70
3.1 顺序结构程序设计和基本语句 70
3.1.1 顺序程序结构 70
3.1.2 简单语句 70
3.1.3 复合语句 72
3.2 Go程序语法注意事项 73
3.2.1 Go程序语句和分号的使用 74
3.2.2 Go程序语句块和左大括号约定 74
3.2.3 注释语句 74
3.3 数据输入输出 74
3.3.1 标准输出函数 75
3.3.2 标准输入函数 82
3.4 Strings包 85
3.4.1 字符串查找函数 85
3.4.2 字符串比较函数 87
3.4.3 字符串位置索引函数 87
3.4.4 字符串追加和替换函数 90
3.5 Strconv包 91
3.5.1 数值转换为字符串函数 91
3.5.2 字符串转换为数值函数 93
3.5.3 Atoi()和Itoa()函数 94
3.6 顺序结构程序举例 95
3.6.1 求平均值 95
3.6.2 计算三角形面积周长 96
3.6.3 求解一元二次方程 97
小结 98
习题 98
第4章 Go选择结构程序设计 100
4.1 if语句 100
4.1.1 if语句的形式 100
4.1.2 if语句的嵌套 104
4.1.3 if语句的注意事项 105
4.2 switch语句 107
4.2.1 switch语句结构 107
4.2.2 switch语句的特殊形式 108
4.2.3 switch语句的注意事项 112
4.3 选择结构程序举例 112
4.3.1 解一元二次方程 112
4.3.2 打印中文日期信息 114
小结 115
习题 115
第5章 Go循环结构程序设计 116
5.1 for语句 116
5.1.1 for基本循环结构 116
5.1.2 for条件循环结构 118
5.1.3 for无限循环结构 119
5.1.4 使用for语句的注意事项 121
5.1.5 for循环嵌套结构 122
5.2 跳转语句 122
5.2.1 break语句 123
5.2.2 continue语句 124
5.2.3 goto语句 126
5.3 for range语句 128
5.4 循环控制程序举例 129
5.4.1 多重循环嵌套应用举例 129
5.4.2 无限循环和跳转语句应用举例 130
5.4.3 for range语句应用举例 132
小结 133
习题 134
第6章 数组、切片和字典 135
6.1 数组 135
6.1.1 数组的声明 135
6.1.2 数组的初始化 136
6.1.3 数组元素的访问和遍历 137
6.1.4 多维数组 139
6.2 切片 140
6.2.1 切片的声明与创建 141
6.2.2 切片元素的访问和遍历 144
6.2.3 切片的操作 144
6.3 字典 146
6.3.1 字典的声明 146
6.3.2 字典的初始化和创建 147
6.3.3 字典的访问和操作 148
6.4 Go语言内存分配机制 150
6.4.1 new函数 150
6.4.2 make函数 151
6.5 字节切片标准库 152
6.5.1 字节切片处理函数 152
6.5.2 Buffer创建函数及操作方法 168
6.5.3 Reader对象及方法 176
6.6 程序举例 181
6.6.1 数组应用 181
6.6.2 Slice应用 182
6.6.3 Map应用 183
小结 184
习题 185
第7章 函数 186
7.1 函数声明 186
7.1.1 函数声明基本格式 186
7.1.2 函数声明举例 187
7.2 函数调用 188
7.2.1 调用标准函数 189
7.2.2 调用自定义函数 189
7.2.3 调用外部包中的函数 191
7.2.4 调用内置函数 192
7.3 参数传递和返回值 192
7.3.1 参数传递 193
7.3.2 返回值 196
7.4 变参函数 198
7.4.1 变参函数的声明 198
7.4.2 变参的传递 199
7.4.3 任意类型的变参 200
7.5 匿名函数与闭包 201
7.5.1 匿名函数 201
7.5.2 闭包 203
7.6 函数的递归调用和defer语句 204
7.6.1 函数的递归调用 204
7.6.2 defer语句 205
7.6.3 异常恢复机制 208
7.7 程序举例 210
7.7.1 函数嵌套调用举例 210
7.7.2 变参函数举例 211
7.7.3 多返回值函数举例 212
小结 213
习题 214
第8章 结构体和方法 215
8.1 结构体的定义 215
8.1.1 结构体定义 215
8.1.2 结构体变量 217
8.1.3 结构体对象 218
8.1.4 结构体对象初始化 220
8.1.5 结构体的赋值和关系操作 221
8.2 嵌入式结构 222
8.2.1 嵌入式结构用作字段 222
8.2.2 嵌入式结构直接定义结构体变量 223
8.2.3 嵌入式结构直接用于Map 224
8.3 匿名字段 225
8.3.1 匿名字段的初始化 226
8.3.2 匿名字段的访问 227
8.3.3 匿名字段的多种形式 228
8.3.4 匿名字段的重名 229
8.3.5 匿名类型指针 231
8.4 方法 231
8.4.1 结构化程序设计思想 231
8.4.2 面向对象程序设计思想 232
8.4.3 Method的基本定义 233
8.4.4 多个Method可以同名 234
8.4.5 指针作为Receiver 235
8.4.6 匿名Receiver 237
8.4.7 Method的继承 237
8.4.8 Method的重写 238
8.5 可见性规则和Struct的导入 239
8.5.1 可见性规则 240
8.5.2 Struct的导入 240
8.6 字段标签 242
8.7 数据I/O对象及操作 243
8.7.1 ReadWriter对象 243
8.7.2 Reader对象 243
8.7.3 Writer对象 249
8.8 应用举例——链表操作 253
8.8.1 链表简介 253
8.8.2 Struct和Method设计单链表 254
小结 257
习题 257
第9章 接口 259
9.1 接口的概念与定义 259
9.1.1 接口的概念 259
9.1.2 接口的定义 259
9.1.3 接口组合 260
9.1.4 空接口 261
9.2 接口执行机制和赋值 261
9.2.1 接口执行机制 261
9.2.2 接口的赋值 262
9.3 匿名字段方法和接口转换 263
9.3.1 匿名字段方法 264
9.3.2 接口转换 265
9.4 接口类型推断 266
9.4.1 Comma-ok断言 266
9.4.2 Switch测试 267
9.5 反射 268
9.5.1 获取原对象的Type和Value值 268
9.5.2 修改原对象Value值 272
9.5.3 动态调用原对象方法 273
9.6 应用举例——二叉树 274
9.6.1 树的定义和基本术语 275
9.6.2 二叉树简介 275
9.6.3 二叉树的链接存储结构 276
9.6.4 二叉树基本应用测试 281
小结 284
习题 284
第10章 Go并发程序设计 286
10.1 程序并发执行概述 286
10.1.1 程序的顺序执行 286
10.1.2 程序的并发执行 287
10.1.3 程序的并行执行 287
10.2 Goroutine 288
10.2.1 操作系统提供的并发基础 288
10.2.2 Goroutine的定义 288
10.2.3 Goroutine的创建 289
10.3 Channel 290
10.3.1 程序间的并发通信 290
10.3.2 Channel简介 290
10.3.3 Channel声明和初始化 291
10.3.4 数据接收和发送 291
10.3.5 Channel的关闭和迭代器 293
10.3.6 单向Channel 294
10.3.7 异步Channel 295
10.4 Select机制和超时机制 297
10.4.1 Select机制 297
10.4.2 超时机制 299
10.5 Runtime Goroutine 300
10.5.1 出让时间片 300
10.5.2 获取CPU核心数和任务数 301
10.5.3 终止当前Goroutine 302
小结 303
习题 303
第11章 Go网络编程 305
11.1 Go网络编程简介 305
11.1.1 计算机网络概念和体系结构 305
11.1.2 网络编程基本概念 307
11.1.3 网络编程模式 311
11.1.4 Socket网络编程接口 313
11.2 Go网络编程基础 314
11.2.1 IP地址和域名解析 314
11.2.2 主机信息查询 318
11.2.3 服务信息查询 320
11.3 Go网络编程原理 322
11.3.1 Socket网络编程 323
11.3.2 Go网络编程 323
11.4 TCP网络程序设计 324
11.4.1 TCPAddr地址结构体 324
11.4.2 TCPConn对象 325
11.4.3 TCP服务器设计 326
11.4.4 TCP客户机设计 328
11.4.5 使用Goroutine实现并发服务器 329
11.5 UDP网络程序设计 331
11.5.1 UDPAddr地址结构体 331
11.5.2 UDPConn对象 331
11.5.3 UDP服务器设计 332
11.5.4 UDP客户机设计 333
11.6 IP网络程序设计 335
11.6.1 IPAddr地址结构体 335
11.6.2 IPConn对象 335
11.6.3 IP服务器设计 336
11.6.4 IP客户机设计 337
11.6.5 Ping程序设计 339
小结 341
习题 342
附录A Go语言内置关键字 343
附录B Go内置函数 344
附录C Go语言标准库 345
附录D 名词与术语索引表 346
参考文献 351