第1章 初识Go语言 1
1.1语言简史 1
1.2语言特性 2
1.2.1自动垃圾回收 3
1.2.2更丰富的内置类型 4
1.2.3函数多返回值 5
1.2.4错误处理 6
1.2.5匿名函数和闭包 6
1.2.6类型和接口 7
1.2.7并发编程 8
1.2.8反射 9
1.2.9语言交互性 10
1.3第一个Go程序 11
1.3.1代码解读 11
1.3.2编译环境准备 12
1.3.3编译程序 12
1.4开发工具选择 13
1.5工程管理 13
1.6问题追踪和调试 18
1.6.1打印日志 18
1.6.2 GDB调试 18
1.7如何寻求帮助 18
1.7.1邮件列表 19
1.7.2网站资源 19
1.8小结 19
第2章 顺序编程 20
2.1变量 20
2.1.1变量声明 20
2.1.2变量初始化 21
2.1.3变量赋值 21
2.1.4匿名变量 22
2.2常量 22
2.2.1字面常量 22
2.2.2常量定义 23
2.2.3预定义常量 23
2.2.4枚举 24
2.3类型 24
2.3.1布尔类型 25
2.3.2整型 25
2.3.3浮点型 27
2.3.4复数类型 28
2.3.5字符串 28
2.3.6字符类型 30
2.3.7数组 31
2.3.8数组切片 32
2.3.9 map 36
2.4流程控制 38
2.4.1条件语句 38
2.4.2选择语句 39
2.4.3循环语句 40
2.4.4跳转语句 41
2.5函数 41
2.5.1函数定义 42
2.5.2函数调用 42
2.5.3不定参数 43
2.5.4多返回值 45
2.5.5匿名函数与闭包 45
2.6错误处理 47
2.6.1 error接口 47
2.6.2 defer 48
2.6.3 panic()和recover() 49
2.7完整示例 50
2.7.1程序结构 51
2.7.2主程序 51
2.7.3算法实现 54
2.7.4主程序 57
2.7.5构建与执行 59
2.8小结 61
第3章 面向对象编程 62
3.1类型系统 62
3.1.1为类型添加方法 63
3.1.2值语义和引用语义 66
3.1.3结构体 67
3.2初始化 68
3.3匿名组合 68
3.4可见性 71
3.5接口 71
3.5.1其他语言的接口 71
3.5.2非侵入式接口 73
3.5.3接口赋值 74
3.5.4接口查询 76
3.5.5类型查询 78
3.5.6接口组合 78
3.5.7 Any类型 79
3.6完整示例 79
3.6.1音乐库 80
3.6.2音乐播放 82
3.6.3主程序 84
3.6.4构建运行 86
3.6.5遗留问题 86
3.7小结 87
第4章 并发编程 88
4.1并发基础 88
4.2协程 90
4.3 goroutine 90
4.4并发通信 91
4.5 channel 94
4.5.1基本语法 95
4.5.2 select 95
4.5.3缓冲机制 96
4.5.4超时机制 97
4.5.5 channel的传递 98
4.5.6单向channel 98
4.5.7关闭channel 99
4.6多核并行化 100
4.7出让时间片 101
4.8同步 101
4.8.1同步锁 101
4.8.2全局唯一性操作 102
4.9完整示例 103
4.9.1简单IPC框架 105
4.9.2中央服务器 108
4.9.3主程序 113
4.9.4运行程序 116
4.10小结 117
第5章 网络编程 118
5.1 Socket编程 118
5.1.1 Dial()函数 118
5.1.2 ICMP示例程序 119
5.1.3 TCP示例程序 121
5.1.4更丰富的网络通信 122
5.2 HTTP编程 124
5.2.1 HTTP客户端 124
5.2.2 HTTP服务端 130
5.3 RPC编程 132
5.3.1 Go语言中的RPC支持与处理 132
5.3.2 Gob简介 134
5.3.3设计优雅的RPC接口 134
5.4 JSON处理 135
5.4.1编码为JSON格式 136
5.4.2解码JSON数据 137
5.4.3解码未知结构的JSON数据 138
5.4.4 JSON的流式读写 140
5.5网站开发 140
5.5.1最简单的网站程序 141
5.5.2 net/http包简介 141
5.5.3开发一个简单的相册网站 142
5.6小结 157
第6章 安全编程 158
6.1数据加密 158
6.2数字签名 158
6.3数字证书 159
6.4 PKI体系 159
6.5 Go语言的哈希函数 159
6.6加密通信 160
6.6.1加密通信流程 161
6.6.2支持HTTPS的Web服务器 162
6.6.3支持HTTPS的文件服务器 165
6.6.4基于SSL/TLS的ECHO程序 166
6.7小结 169
第7章 工程管理 170
7.1 Go命令行工具 170
7.2代码风格 172
7.2.1强制性编码规范 172
7.2.2非强制性编码风格建议 173
7.3远程import支持 175
7.4工程组织 175
7.4.1 GOPATH 176
7.4.2目录结构 176
7.5文档管理 177
7.6工程构建 180
7.7跨平台开发 180
7.7.1交叉编译 181
7.7.2 Android支持 182
7.8单元测试 183
7.9打包分发 184
7.10小结 184
第8章 开发工具 186
8.1选择开发工具 186
8.2 gedit 187
8.2.1语法高亮 187
8.2.2编译环境 187
8.3 Vim 188
8.4 Eclipse 189
8.5 Notepad++ 192
8.5.1语法高亮 192
8.5.2编译环境 192
8.6 Lite1DE 193
8.7小结 195
第9章 进阶话题 196
9.1反射 196
9.1.1基本概念 196
9.1.2基本用法 197
9.1.3对结构的反射操作 199
9.2语言交互性 199
9.2.1类型映射 200
9.2.2字符串映射 201
9.2.3 C程序 201
9.2.4函数调用 202
9.2.5编译Cgo 203
9.3链接符号 203
9.4 goroutine机理 204
9.4.1协程 204
9.4.2协程的C语言实现 205
9.4.3协程库概述 205
9.4.4任务 208
9.4.5任务调度 210
9.4.6上下文切换 211
9.4.7通信机制 215
9.5接口机理 216
9.5.1类型赋值给接口 217
9.5.2接口查询 223
9.5.3接口赋值 224
附录A 225