1 云之道 1
云之道的优点 2
遵循简单 2
测试优先,测试一切 3
尽早发布,频繁发布 5
自动化一切 6
建立服务生态系统 7
为什么使用Go 8
简单 8
开源 8
易于自动化和IDE自由化 8
本章小结 9
2 开始 11
正确的工具 11
配置Git 12
安装Homebrew 12
安装Git客户端 13
安装Mercurial和Bazaar 13
创建GitHub账户 14
创建Go环境 14
配置Go工作区 14
检查环境 15
本章小结 16
3 Go入门 17
建立Hello cloud 18
使用基本函数 19
使用结构体 22
介绍Go接口 25
向结构体添加方法 25
Go中的接口动态类型检查 26
使用第三方包 28
创建自有包 30
导出函数和数据 31
创建包 31
本章小结 34
4 持续交付 35
Docker介绍 36
为什么要使用Docker 36
安装Docker 36
运行Docker镜像 38
与Wercker的持续集成 39
持续集成的最佳实践 39
为什么使用Wercker 40
创建Wercker应用程序 41
安装Wercker CLI 42
创建Wercker配置文件 43
使用Wercker进行构建 48
部署到Docker Hub 50
读者练习:创建完整的开发管道 51
高级挑战:集成第三方库 53
本章小结 53
5 在Go中构建微服务 55
设计API First的服务 55
设计match API 56
创建API Blueprint 56
通过Apiary测试和发布文档 58
架设微服务 59
构建Test First的服务 62
创建第一个失败测试 63
测试Location Header 66
壮丽的蒙太奇:迭代测试 67
在云端部署和运行 70
创建PWS账户 70
配置PCF开发环境 70
提交到Cloud Foundry 71
本章小结 72
6 运用后端服务 75
设计服务系统 75
测试优先构建依赖服务 77
构建fulfillment服务 78
构建catalog服务 81
在服务之间共享结构化数据 87
客户端引用服务端包 88
客户端复制服务端结构 88
客户端与服务端引用共享包 89
使用服务捆绑来外部化地址与元数据 90
服务发现 93
动态服务发现 94
Netflix的服务发现系统Eureka 94
读者练习 97
进阶操作 97
本章小结 98
7 构建数据服务 99
构建MongoDB存储库 100
为什么选择MongoDB 100
更新存储库模型 100
通过Go来操作MongoDB 101
以Test-First方式编写MongoDB存储库 102
集成测试一个Mongo-Backed服务 107
集成临时MongoDB数据库 108
编写一个集成测试 110
在云中运行 115
后端服务的配置 115
本章小结 117
8 事件溯源和CQRS 119
现实源自事件 120
幂等 121
隔离 121
可测试 122
可再现,可恢复 123
大数据 123
拥抱最终一致性 123
CQRS简介 124
事件溯源案例 126
天气监测 126
互联网汽车 127
社交媒体消息处理 127
代码示例:管理无人机舰队 128
构建命令处理程序服务 129
RabbitMQ介绍 129
构建命令处理器服务 133
构建事件处理器 135
对事件处理器进行集成测试 140
构建查询处理程序服务 140
本章小结 141
9 使用Go构建Web应用程序 143
处理静态文件和asset 143
支持JavaScript客户端 145
使用服务端模板 148
处理表单 150
使用cookie和会话状态 151
写入cookie 152
读取cookie 153
使用Wercker构建和部署 153
本章小结 155
10 云安全 157
保护Web应用程序 157
应用程序安全性选项 158
设置Auth0账户 159
构建一个OAuth安全的Web应用程序 160
运行安全的Web应用程序 164
保护微服务 166
客户端凭据模式概述 166
使用客户端凭据保护微服务 168
关于SSL的注意事项 169
隐私和数据安全 170
黑客不能得到你没有的 170
读者练习 172
本章小结 173
11 使用WebSockets 175
WebSockets解析 175
WebSockets如何工作 176
WebSockets与服务器发送事件对比 177
设计WebSockets服务器 177
WebSockets的云原生适应性 178
使用消息服务创建WebSockets应用 180
关于JavaScript框架 183
运行WebSockets示例 183
本章小结 184
12 使用React构建Web视图 185
JavaScript的形势 186
为什么选择React 186
虚拟DOM 187
组件组合 187
响应式数据流 188
集中焦点 188
使用的便利性 189
React应用程序剖析 189
package.json文件 189
Webpack.config.js文件 191
.babelrc文件 191
理解JSX和Webpack 191
React组件 192
构建简单的React应用程序 192
不赞成的做法 199
测试React应用程序 200
进一步阅读 200
React网站 200
React书籍 201
其他资料 201
本章小结 201
13 使用Flux构建可扩展的UI 203
Flux介绍 203
dispatcher 204
store 204
view 205
action 205
source 205
Flux的复杂性 205
创建Flux应用程序 206
本章小结 215
14 创建完整应用World of FluxCraft 217
World of FluxCraft介绍 218
架构概览 219
独立扩展、版本控制和部署 221
数据库不是集成层 221
单向不可变数据流 221
Flux GUI 222
Go UI宿主服务 223
玩家移动时序图 224
命令处理 225
事件处理 226
维持现实服务的状态 227
地图管理 227
自动验收测试 228
本章小结 230
15 结论 231
我们学到了什么 231
Go不是小众语言 231
微服务应该有多“微” 232
持续交付和部署 232
测试一切 232
尽早发布,频繁发布 232
事件溯源、CQRS和更多首字母缩略词 233
下一步 233
附录A 云应用的故障排查 235