新書推薦:
《
你漏财了:9种逆向思维算清人生这本账
》
售價:HK$
55.8
《
我们终将老去:认识生命的第二阶段(比利时的“理查德·道金斯”,一位行为生物学家的老年有用论
》
售價:HK$
91.8
《
谁是窃书之人 日本文坛新锐作家深绿野分著 无限流×悬疑×幻想小说
》
售價:HK$
55.8
《
一个经济杀手的自白 第3版
》
售價:HK$
110.9
《
8秒按压告别疼痛
》
售價:HK$
87.4
《
津巴多时间心理学:挣脱束缚、改写命运的6种时间观
》
售價:HK$
77.3
《
大英博物馆东南亚简史
》
售價:HK$
177.0
《
纯粹·我只要少许
》
售價:HK$
80.6
|
編輯推薦: |
1、给小白的Go语言微服务实战书籍
2、面向所有工程师,即便是没有Go语言基础的Java、PHP、Python工程师也可以直接上手使用,书中对Go语言进行了全面精炼的介绍。
3、书中代码注释详细、理论解释形象,在GitHub上提供了可运行的完整代码。
4、包含大量案例,对于重要的内容都给出了案例及相关分析,且每一部分都有一个案例从0开始分析、构建,指导读者从使用的角度去思考如何活学活用,
5、本书自始至终都围绕Go语言、微服务和实战这三大特色,全书从Go语言的基础引入,到Go语言的进阶、微服务的理论,再到*后的微服务实战,都给出了技术实现和实例代码,让有编程基础的读者可以深入浅出地学习和实践。
|
內容簡介: |
本书针对Go语言进行微服务开发做了全面细致的介绍,书中内容包括四大部分。
第①部分为Go语言基础(第1~7章),包括Go语言基础语法、Go语言基本特性和Go语言实战项目等内容。
第②部分为Go语言进阶(第8~10章),主要介绍Go语言的并发编程进阶、Go语言Web编程以及综合实战。
第③部分为微服务理论(第11~18章),包括微服务模式的理论基础、微服务的进程间通信、微服务的分布式事务管理、领域驱动设计(DDD)、微服务测试、Docker及ES-CQRS策略。其中,微服务进程间通信重点介绍了gRPC,ES-CQRS策略部分给出了Go语言的实现。
第④部分为微服务实战(第19~22章),这一部分通过实战项目讲解了微服务的生产环境、日志和监控、持续部署等内容。
书中每一部分都提供了示例代码或实战项目,供读者边学习边动手实践,尽量做到让有Go语言基础的人尽快了解、掌握微服务模式。
|
關於作者: |
刘金亮
研究生毕业于北京大学,现任用友集团架构师。曾经参与IBM、Accenture、Capgemini的软件系统咨询和开发项目,对复杂业务系统的架构和设计有丰富的经验,著有《Odoo快速入门与实战》。
|
目錄:
|
前言
第一部分 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 slice 27
3.2.1 结构定义 27
3.2.2 基本操作 28
3.2.3 append 30
3.2.4 copy 31
3.2.5 其他 32
3.3 map 33
3.3.1 定义 33
3.3.2 基本操作 33
3.4 struct 35
3.4.1 结构定义 36
3.4.2 基本操作 37
3.4.3 组合 38
3.5 JSON 40
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.WaitGroup 62
5.2 通道 64
5.2.1 channel写入数据 64
5.2.2 channel接收数据 65
5.2.3 以channel作为函数参数 66
5.2.4 缓存channel 67
5.2.5 select 70
5.2.6 超时检查 71
5.3 pipeline 74
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.Once 130
8.2.4 sync.Cond 131
8.2.5 sync.Pool 134
8.2.6 sync.Map 136
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 nethttp包 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 Socket 166
9.3.3 UDP Socket 169
9.3.4 WebSocket 171
9.4 中间件 174
9.4.1 基本用法 174
9.4.2 进阶用法 176
9.5 数据库访问 179
9.5.1 databasesql接口 180
9.5.2 sqlx 182
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 SOA 201
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 netrpc包 219
13.3.2 gRPC简介 221
13.3.3 Go语言实现gRPC调用 222
13.4 微服务发现:consul 224
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章 微服务运行环境:Docker 276
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 mount 284
17.4 Docker网络 285
17.4.1 桥接驱动及自定义bridge 285
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
18.2.2 分析与设计 293
18.2.3 核心实现 296
18.3 小结 299
第四部分 微服务实战
第19章 生产环境的微服务安全 302
19.1 加密和签名 302
19.1.1 对称密钥加密 302
19.1.2 公钥密码 303
19.1.3 X.509数字证书 303
19.1.4 TLSSSL 304
19.2 外部安全 304
19.2.1 防火墙 304
19.2.2 页面应用的防火墙 305
19.2.3 API网关 305
19.2.4 DDoS保护 306
19.3 应用安全 307
19.3.1 攻击者如何绕过防火墙 308
19.3.2 输入校验 308
19.3.3 TLS 310
19.3.4 在rest中进行数据保护 313
19.3.5 JWT 314
19.3.6 大消息的非对称加密 315
19.4 运维安全 316
19.4.1 修补容器 316
19.4.2 软件更新 317
19.4.3 修补应用程序代码 317
19.4.4 日志 317
19.5 小结 317
第20章 日志和监控 318
20.1 日志最佳实践 319
20.2 指标 319
20.2.1 指标数据类型 320
20.2.2 命名约定 320
20.2.3 存储和查询 322
20.2.4 Grafana 323
20.3 日志记录 326
20.3.1 具有关联ID的分布式跟踪 326
20.3.2 ElasticSearch、Logstash和Kibana 327
20.3.3 Kibana 328
20.4 异常 330
20.5 小结 332
第21章 持续交付 333
21.1 持续交付简介 333
21.1.1 手动部署 334
21.1.2 持续交付的好处 334
21.1.3 持续交付面面观 335
21.1.4 持续交付的过程 337
21.2 容器编排的选项和基础架构 338
21.3 Terraform 339
21.3.1 提供者 340
21.3.2 Terraform配置入口点 341
21.3.3 VPC模块 342
21.3.4 输出变量 346
21.3.5 创建基础架构 348
21.4 应用范例 348
21.4.1 持续部署的工作流程 349
21.4.2 构建 352
21.4.3 测试 353
21.4.4 基准测试 354
21.4.5 静态代码测试 354
21.4.6 集成测试 355
21.4.7 部署 356
21.4.8 冒烟测试 357
21.4.9 监控和预警 357
21.5 小结 359
第22章 使用Go kit框架构建微服务 360
22.1 创建服务 361
22.1.1 测试 361
22.1.2 Go语言中的构造函数 362
22.1.3 使用bcrypt进行Hash处理并验证密码 363
22.2 使用请求和响应对方法调用进行建模 364
22.2.1 Go kit中的端点 365
22.2.2 为服务方法设定终点 366
22.2.3 不同级别的错误 366
22.2.4 将端点包装到服务实现中 367
22.3 使用Go kit实现一个HTTP服务器 368
22.4 Go kit中的gRPC服务器 368
22.5 创建服务器命令 371
22.5.1 使用Go kit端点 373
22.5.2 运行HTTP服务器 373
22.5.3 运行gRPC服务器 373
22.5.4 防止main函数突然终止 374
22.5.5 通过HTTP使用服务 374
22.6 构建一个gRPC客户端 375
22.6.1 使用服务的命令行工具 376
22.6.2 在CLI中解析参数 377
22.7 服务中间件的速率限制 378
22.7.1 Go kit中的中间件 378
22.7.2 速率限制 380
22.8 小结 380
附录 Go语言中的关键字 381
|
內容試閱:
|
当今世界,软件的规模越来越大、功能越来越复杂,研发团队的规模也变得越来越大,运维人员和研发人员之间的工作交集越来越多。在这个大前提下,微服务模式在大型项目中开始风靡。
本书对使用Go语言进行微服务开发做了全面细致的介绍,包括微服务的基础知识、微服务的拆分、微服务进程间通信(IPC)、微服务的分布式事务管理、领域驱动设计(DDD)、微服务中的测试、基于ES-CQRS的微服务实践、微服务生产环境和持续交付等。本书比较全面地对微服务进行了介绍,而且对于每个知识点都给出了技术实现和实例代码,比如微服务进程间通信部分重点介绍了gRPC,ES-CQRS部分则给出了Go语言的具体实现。在介绍完知识点之后,本书给出了一些综合性的案例,比如第10章、第22章等,并通过GitHub提供了完整的可运行的代码,可帮助有基本Go语言语法知识的读者尽快了解、掌握微服务模式。
不同的语言对于微服务的实现都不相同。为了让读者更深入地了解Go语言的微服务实现模式,本书前6章深入介绍了Go语言的语法知识,包括Go语言程序基础,基本数据类型,字符串与复合数据类型,函数、方法、接口和反射,并发编程,包和代码测试等。对于已经熟练掌握Go语言的读者来说,前6章可以略过,或者快速浏览一遍。
【本书目的】
本书是为Go语言开发者和希望进入Go微服务开发领域的读者准备的,它不是一本仅介绍微服务的书,有一半的篇幅是在介绍Go语言的知识,所以特别适合有Java、Python等其他编程基础而希望转到Go语言编程的读者阅读。
本书除了详细地介绍相应的理论知识以外,还配备了示例代码,所有代码均已在GitHub上开源,读者可以边读书边实践。希望通过这种方式让更多的工程师受益,帮助他们将所学知识尽快转化为生产力。
【本书内容】
本书分为四个部分,完整涵盖了从Go语言到微服务的各个方面。每一部分都提供了示例代码或实战项目,读者可以边学习边动手练习。
第一部分是Go语言基础(第1~7章),包括Go语言的基础语法、Go语言的基本特性和Go语言的实战项目。Go语言的基础语法部分包括变量、基本数据类型、垃圾回收机制、字符串和复合类型等。对于字符串的介绍,重点讲解了Go语言字符串的特点及存储方式。另外,第一部分还介绍了Go语言里的slice如何存储、如何操作。Go语言对slice的使用非常频繁,而struct是在Go语言没有类的情况下对封装的具体体现,struct是数据类型的核心。Go语言的基本特性部分包括Go语言的基本函数、方法、接口、反射及并发等内容。Go语言没有类,它如何实现面向对象的诸多特性呢?比如封装、多态等。函数和goroutine相结合又会出现什么情况?读者学习本部分内容后对Go语言的灵活性会有所理解。Go语言的并发通过goroutine和channel实现,语法很简单,但理论知识需要清楚理解。Go语言的实战项目部分主要介绍了Go语言自带的测试工具和一个实战项目。这个模拟项目对本部分前面的知识进行了总结和复习。
第二部分是Go语言进阶(第8~10章),主要内容是Go语言的并发编程进阶、Go语言的Web编程以及综合实战。并发编程进阶及Web编程部分分别介绍了可以承担高负载的线程池实现以及Go语言里的Web编程。Go语言的并发性能非常强,只要把goroutine用好,结合设计模式,就可以设计出优秀的高并发服务。而Go语言的Web编程就更为方便,甚至只使用标准模块就可以写出Web程序。另外,本部分还会介绍一个综合案例,不仅对第一部分及第二部分所学的知识进行总结和复习,同时还介绍了Web编程常用的gin框架。
第三部分是微服务理论(第11~18章),主要内容包括微服务模式的理论基础、微服务的进程间通信、微服务的分布式事务管理、领域驱动设计(DDD)、微服务测试、Docker及ES-CQRS策略。在微服务模式的理论基础部分,详细介绍了各种模式的演变,并且给出了具体的示例代码。进程间通信部分主要介绍了Go语言中的常用进程通信方式protobuf、gRPC和consul,是微服务的技术入门。在微服务的分布式事务管理部分对分布式事务管理的方式进行了探讨,对不同拆分方式的优缺点进行了对比,其中重点介绍了Saga,并且给出了代码实现。领域驱动设计(DDD)部分介绍了其在Go语言中的实现,并给出了相关的概念,比如聚合、聚合的模式,此外,还展示了一个模拟实现。微服务测试部分介绍了测试的基本方法,建议结合第一部分中Go代码测试进行阅读。Docker部分重点介绍了Docker的基本原理及使用方法。Docker一般是由运维人员操作的,不过工程师也需要对Docker有一定的了解,以便于开发微服务。最后,本部分介绍了微服务中的知名策略ES-CQRS在Go语言中的实现。
第四部分是微服务实战(第19~22章),包括微服务的生产环境、日志和监控、持续交付、实战项目。生产环境部分重点介绍了生产环境的安全,以及应用、运维和外部安全等内容,这是工程师在实战中必须了解的知识。日志和监控是微服务开发必须关注的内容,一旦微服务处于运行状态,工程师就可以通过日志和监控工具来诊断服务。持续交付,或者说DevOps,是微服务开发和部署过程中必不可少的知识领域,它是一个非常大的话题,本书站在Go语言的角度对其进行了介绍,并给出了实践案例,目的是让开发人员更好地理解持续交付。实战项目使用Go kit框架进行模拟。Go kit框架是Go语言领域非常著名的框架,所以本书选择结合此框架对前面介绍的知识进行实战应用。
【本书适合的读者】
本书适合有其他语言编程经验或者Go编程基础的读者阅读,如果完全没有编程基础,建议首先阅读D&K的The Go Programming Language(《Go程序设计语言》)。
本书有助于有其他语言编程基础(比如Java、Python、C)的工程师转到Go语言的微服务实现项目中。
此外,对于对Go语言和微服务感兴趣的在读大学生来说,本书也是不错的选择,书中丰富的案例不仅能帮助学生学习知识,也能让学生提前了解工程项目的代码架构、测试工具等。
|
|