更新时间:2020-04-22 12:15:27
封面
版权信息
内容提要
序一
序二
前言
致谢
资源与支持
配套资源
提交勘误
与我们联系
关于异步社区和异步图书
第1章 语言基础
1.1 Go语言创世纪
1.2 “Hello World”的革命
1.3 数组、字符串和切片
1.4 函数、方法和接口
1.5 面向并发的内存模型
1.6 常见的并发模式
1.7 错误和异常
1.8 补充说明
第2章 CGO编程
2.1 快速入门
2.2 CGO基础
2.3 类型转换
2.4 函数调用
2.5 内部机制
2.6 实战:封装qsort
2.7 CGO内存模型
2.8 C++类包装
2.9 静态库和动态库
2.10 编译和链接参数
2.11 补充说明
第3章 Go汇编语言
3.1 快速入门
3.2 计算机结构
3.3 常量和全局变量
3.4 函数
3.5 控制流
3.6 再论函数
3.7 汇编语言的威力
3.8 例子:Goroutine ID
3.9 Delve调试器
3.10 补充说明
第4章 RPC和Protobuf
4.1 RPC入门
4.2 Protobuf
4.3 玩转RPC
4.4 gRPC入门
4.5 gRPC进阶
4.6 gRPC和Protobuf扩展
4.7 pbgo:基于Protobuf的框架
4.8 grpcurl工具
4.9 补充说明
第5章 Go和Web
5.1 Web开发简介
5.2 请求路由
5.3 中间件
5.4 请求校验
5.5 Database 和数据库打交道
5.6 服务流量限制
5.7 常见大型Web项目分层
5.8 接口和表驱动开发
5.9 灰度发布和A/B测试
5.10 补充说明
第6章 分布式系统
6.1 分布式ID生成器
6.2 分布式锁
6.3 延时任务系统
6.4 分布式搜索引擎
6.5 负载均衡
6.6 分布式配置管理
6.7 分布式爬虫
6.8 补充说明
附录A 使用Go语言常遇到的问题
A.1 可变参数是空接口类型
A.2 数组是值传递
A.3 map遍历时顺序不固定
A.4 返回值被屏蔽
A.5 recover()必须在defer函数中运行
A.6 main()函数提前退出
A.7 通过Sleep()来回避并发中的问题
A.8 独占CPU导致其他Goroutine饿死
A.9 不同Goroutine之间不满足顺序一致性内存模型
A.10 闭包错误引用同一个变量
A.11 在循环内部执行defer语句
A.12 切片会导致整个底层数组被锁定
A.13 空指针和空接口不等价
A.14 内存地址会变化
A.15 Goroutine泄漏
附录B 有趣的代码片段
B.1 自重写程序
B.2 三元表达式
B.3 禁止main()函数退出的方法
B.4 基于通道的随机数生成器
B.5 用Assert()测试断言