前言
第一部分 Go语言基础
第1章 Go语言程序基础2
1.1 Hello,World!2
1.2 变量、指针及赋值5
1.2.1 变量和常量5
1.2.2 指针8
1.2.3 赋值9
1.3 包及作用域10
1.4 选择和循环12
1.5 垃圾回收13
1.6 小结15
第2章 基本数据类型16
2.1 整型17
2.1.1 整型取值范围17
2.1.2 运算符18
2.2 浮点型19
2.3 复数和布尔类型21
2.4 格式化说明符22
2.5 小结22
第3章 字符串与复合数据类型23
3.1 字符串和数组23
3.1.1 字符串24
3.1.2 数组26
3.2 slice27
3.2.1 结构定义27
3.2.2 基本操作28
3.2.3 append30
3.2.4 copy31
3.2.5 其他32
3.3 map33
3.3.1 定义33
3.3.2 基本操作33
3.4 struct35
3.4.1 结构定义36
3.4.2 基本操作37
3.4.3 组合38
3.5 JSON40
3.6 小结40
第4章 函数、方法、接口和反射41
4.1 函数41
4.1.1 函数的定义41
4.1.2 闭包42
4.1.3 作用域43
4.1.4 多返回值及变长参数45
4.1.5 defer关键字46
4.2 方法46
4.3 接口50
4.4 反射54
4.5 小结57
第5章 并发编程59
5.1 协程59
5.1.1 核心概念60
5.1.2 goroutine的基本使用60
5.1.3 sync.WaitGroup62
5.2 通道64
5.2.1 channel写入数据64
5.2.2 channel接收数据65
5.2.3 以channel作为函数参数66
5.2.4 缓存channel67
5.2.5 select70
5.2.6 超时检查71
5.3 pipeline74
5.4 小结76
第6章 包和代码测试77
6.1 包及Go工具77
6.1.1 包导入78
6.1.2 Go工具79
6.2 代码优化84
6.2.1 Go代码的优化84
6.2.2 性能分析84
6.3 测试90
6.3.1 功能测试函数91
6.3.2 基准测试函数93
6.3.3 示例函数96
6.4 小结98
第7章 综合实战案例99
7.1 案例需求99
7.2 通信协议100
7.3 服务器端104
7.4 客户端109
7.5 小结116
第二部分 Go语言进阶
第8章 并发编程进阶118
8.1 竞态与并发模式118
8.1.1 数据竞态118
8.1.2 并发原理123
8.2 sync包126
8.2.1 sync.Mutex互斥锁126
8.2.2 sync.RWMutex多读写锁128
8.2.3 sync.Once130
8.2.4 sync.Cond131
8.2.5 sync.Pool134
8.2.6 sync.Map136
8.3 context包138
8.3.1 应用场景138
8.3.2 定义139
8.3.3 继承141
8.3.4 示例142
8.4 工作池145
8.5 小结151
第9章 Go Web编程152
9.1 net/http包152
9.1.1 Go Web工作的基本原理152
9.1.2 http详解156
9.2 Web框架162
9.2.1 选择框架162
9.2.2 httprouter框架163
9.3 Web底层服务165
9.3.1 Scoket简介165
9.3.2 TCP Socket166
9.3.3 UDP Socket169
9.3.4 WebSocket171
9.4 中间件174
9.4.1 基本用法174
9.4.2 进阶用法176
9.5 数据库访问179
9.5.1 database/sql接口180
9.5.2 sqlx182
9.6 小结183
第10章 综合案例184
10.1 案例需求184
10.2 项目代码布局186
10.3 配置和日志187
10.3.1 配置188
10.3.2 日志190
10.4 模型191
10.5 gin框架193
10.6 小结196
第三部分 微服务理论
第11章 微服务198
11.1 微服务简介198
11.1.1 什么是微服务198
11.1.2 微服务的由来198
11.1.3 微服务与微服务架构199
11.2 系统架构的演进199
11.2.1 单体架构200
11.2.2 垂直架构201
11.2.3 SOA201
11.2.4 微服务架构202
11.3 小结205
第12章 微服务化策略206
12.1 微服务架构风格206
12.1.1 每个服务都拥有独立的数据库206
12.1.2 基于API的模块化207
12.2 微服务化进程中的重点问题207
12.2.1 微服务的通信207
12.2.2 事务管理的一致性208
12.2.3 微服务数据查询208
12.2.4 微服务部署208
12.2.5 微服务生产环境监控209
12.2.6 微服务的自动化测试209
12.3 微服务的拆分209
12.3.1 拆分的指导原则210
12.3.2 依据业务能力拆分210
12.3.3 依据领域驱动设计拆分211
12.3.4 服务API的定义213
12.4 小结214
第13章 微服务中的进程间通信215
13.1 微服务中的进程间通信概述215
13.1.1 交互模式215
13.1.2 API定义217
13.2 protobuf格式217
13.2.1 protobuf简介217
13.2.2 protobuf的简单使用217
13.3 gRPC包219
13.3.1 net/rpc包219
13.3.2 gRPC简介221
13.3.3 Go语言实现gRPC调用222
13.4 微服务发现:consul224
13.5 小结226
第14章 微服务中的分布式事务管理227
14.1 微服务下的事务管理227
14.1.1 面临的难题227
14.1.2 SRP的折衷228
14.2 微服务中处理事务的几种方式229
14.2.1 避免跨微服务的事务229
14.2.2 基于XA协议的两阶段提交协议229
14.2.3 最终一致性和补偿231
14.3 Saga模式234
14.3.1 Saga模式介绍234
14.3.2 编排模式235
14.3.3 编配模式237
14.4 Saga模式的Go语言示例238
14.4.1 Saga对象的Go语言实现238
14.4.2 中央协调器的Go语言实现239
14.5 小结243
第15章 领域驱动设计的Go语言实现244
15.1 聚合模式介绍244
15.2 使用聚合模式247
15.2.1 聚合拥有明确的边界247
15.2.2 聚合的规则248
15.2.3 聚合颗粒度250
15.2.4 使用聚合设计业务逻辑250
15.3 领域事件251
15.4 Go语言领域模型的模拟实现252
15.4.1 聚合253
15.4.2 实体和值对象253
15.4.3 服务255
15.5 小结257
第16章 微服务中的测试258
16.1 测试金字塔258
16.2 单元测试260
16.3 依赖注入和mock测试263
16.4 行为驱动开发266
16.5 使用Docker Compose测试272
16.6 小结275
第17章 微服务运行环境:Docker276
17.1 Docker介绍276
17.1.1 Docker引擎276
17.1.2 守护进程277
17.1.3 镜像及容器277
17.1.4 仓库278
17.1.5 数据卷278
17.2 运行第一个Docker容器279
17.2.1 Docker安装279
17.2.2 HelloWorld程序示例279
17.2.3 运行复杂一点的容器280
17.3 Docker数据持久化282
17.3.1 数据卷282
17.3.2 bind mount284
17.4 Docker网络285
17.4.1 桥接驱动及自定义bridge285
17.4.2 Host模式、Overlay模式及None模式288
17.5 小结289
第18章 Go语言基于ES-CQRS的微服务实践290
18.1 理论介绍290
18.1.1 事件溯源290
18.1.2 命令查询职责分离291
18.2 ES-CQRS在Go语言中的实现示例292
18.2.1 需求293