- 产品名称:Go Web 编程
- 是否是套装: 否
- 书名: Go Web 编程
- 定价: 79.00元
- 出版社名称: 人民邮电出版社
- 作者: 郑兆雄
- 书名: GO WEB 编程
- ISBN编号: 9787115322470
目录
DIYI部分 Go与Web应用
第1章 Go与Web应用 3
1.1 使用Go语言构建Web应用 3
1.1.1 Go与可扩展Web应用 4
1.1.2 Go与模块化Web应用 4
1.1.3 Go与可维护的Web应用 5
1.1.4 Go与高性能Web应用 5
1.2 Web应用的工作原理 6
1.3 简介 7
1.4 Web应用的诞生 8
1.5 请求 9
1.5.1 请求方法 10
1.5.2 安全的请求方法 11
1.5.3 幂等的请求方法 11
1.5.4 浏览器对请求方法的支持 11
1.5.5 请求首部 12
1.6 响应 13
1.6.1 响应状态码 13
1.6.2 响应首部 14
1.7 URI 15
1.8 /2简介 16
1.9 Web应用的各个组成部分 16
1.9.1 处理器 17
1.9.2 模板引擎 18
1.10 Hello Go 18
1.11 小结 21
第2章 ChitChat论坛 23
2.1 ChitChat简介 23
2.2 应用设计 24
2.3 数据模型 26
2.4 请求的接收与处理 27
2.4.1 多路复用器 27
2.4.2 服务静态文件 29
2.4.3 创建处理器函数 29
2.4.4 使用cookie进行访问控制 30
2.5 使用模板生成HTML响应 33
2.6 安装PostgreSQL 38
2.6.1 在Linux或FreeBSD系统上安装 38
2.6.2 在Mac OS X系统上安装 39
2.6.3 在Windows系统上安装 39
2.7 连接数据库 39
2.8 启动服务器 44
2.9 Web应用运作流程回顾 45
2.10 小结 46
第二部分 Web应用的基本组成部分
第3章 接收请求 49
3.1 Go的/标准库 49
3.2 使用Go构建服务器 51
3.2.1 Go Web服务器 51
3.2.2 通过S提供服务 53
3.3 处理器和处理器函数 56
3.3.1 处理请求 56
3.3.2 使用多个处理器 58
3.3.3 处理器函数 59
3.3.4 串联多个处理器和处理器函数 61
3.3.5 ServeMux和DefaultServeMux 65
3.3.6 使用其他多路复用器 66
3.4 使用/2 68
3.5 小结 70
第4章 处理请求 72
4.1 请求和响应 72
4.1.1 Request结构 73
4.1.2 请求URL 73
4.1.3 请求首部 74
4.1.4 请求主体 76
4.2 Go与HTML表单 77
4.2.1 Form字段 79
4.2.2 PostForm字段 80
4.2.3 MultipartForm字段 81
4.2.4 文件 83
4.2.5 处理带有JSON主体的POST请求 85
4.3 ResponseWriter 86
4.4 cookie 91
4.4.1 Go与cookie 91
4.4.2 将cookie发送至浏览器 92
4.4.3 从浏览器里面获取cookie 94
4.4.4 使用cookie实现闪现消息 96
4.5 小结 99
第5章 内容展示 100
5.1 模板引擎 100
5.2 Go的模板引擎 102
5.2.1 对模板进行语法分析 104
5.2.2 执行模板 105
5.3 动作 106
5.3.1 条件动作 106
5.3.2 迭代动作 108
5.3.3 设置动作 109
5.3.4 包含动作 111
5.4 参数、变量和管道 113
5.5 函数 114
5.6 上下文感知 116
5.6.1 防御XSS攻击 119
5.6.2 不对HTML进行转义 121
5.7 嵌套模板 122
5.8 通过块动作定义默认模板 126
5.9 小结 127
第6章 存储数据 128
6.1 内存存储 128
6.2 文件存储 131
6.2.1 读取和写入CSV文件 133
6.2.2 gob包 135
6.3 Go与SQL 137
6.3.1 设置数据库 138
6.3.2 连接数据库 140
6.3.3 创建帖子 142
6.3.4 获取帖子 144
6.3.5 更新帖子 145
6.3.6 删除帖子 145
6.3.7 一次获取多篇帖子 146
6.4 Go与SQL的关系 147
6.4.1 设置数据库 147
6.4.2 一对多关系 150
6.5 Go与关系映射器 152
6.5.1 Sqlx 152
6.5.2 Gorm 154
6.6 小结 157
第三部分 实战演练
第7章 Go Web服务 161
7.1 Web服务简介 161
7.2 基于SOAP的Web服务简介 163
7.3 基于REST的Web服务简介 166
7.3.1 将动作转换为资源 168
7.3.2 将动作转换为资源的属性 169
7.4 通过Go分析和创建XML 169
7.4.1 分析XML 169
7.4.2 创建XML 177
7.5 通过Go分析和创建JSON 180
7.5.1 分析JSON 181
7.5.2 创建JSON 184
7.6 创建Go Web服务 187
7.7 小结 194
第8章 应用测试 196
8.1 Go与测试 196
8.2 使用Go进行单元测试 197
8.2.1 跳过测试用例 201
8.2.2 以并行方式运行测试 202
8.2.3 基准测试 203
8.3 使用Go进行测试 206
8.4 测试替身以及依赖注入 210
8.5 第三方Go测试库 217
8.5.1 Gocheck测试包简介 217
8.5.2 Ginkgo测试框架简介 223
8.6 小结 228
第9章 发挥Go的并发优势 230
9.1 并发与并行的区别 230
9.2 goroutine 232
9.2.1 使用goroutine 232
9.2.2 goroutine与性能 235
9.2.3 等待goroutine 238
9.3 通道 239
9.3.1 通过通道实现同步 240
9.3.2 通过通道实现消息传递 242
9.3.3 有缓冲通道 243
9.3.4 从多个通道中选择 244
9.4 在Web应用中使用并发 247
9.4.1 创建马赛克图片 248
9.4.2 马赛克图片Web应用 251
9.4.3 并发版马赛克图片生成Web应用 254
9.5 小结 262
第10章 Go的部署 263
10.1 将应用部署到独立的 服务器 264
10.2 将应用部署到 Heroku 270
10.3 将应用部署到Google App Engine 273
10.4 将应用部署到 Docker 278
10.4.1 什么是Docker 278
10.4.2 安装Docker 279
10.4.3 Docker的理念与 组件 280
10.4.4 Docker化一个Go Web 应用 281
10.4.5 将Docker容器推送至 互联网 283
10.5 部署方法之间的 对比 286
10.6 小结 287
附录 安装和设置Go 288
内容介绍
本书全面介绍使用Go语言开发Web应用所需的全部基本概念,并详细讲解如何运用现代设计原则使用Go语言构建Web应用。本书通过大量的实例介绍核心概念(如处理请求和发送响应、模板引擎和数据持久化),并深入讨论更多高级主题(如并发、Web应用程序测试以及部署到标准系统服务器和PaaS提供商)。 本书以一个网络论坛为例,讲解如何使用请求处理器、多路复用器、模板引擎、存储系统等核心组件构建一个Go Web应用,然后在这一应用的基础上,构建出相应的Web服务。值得一提的是,本书在介绍Go Web开发方法时,基本上只用到Go语言自带的标准库,而不会用到任何特定的Web框架,读者学到的知识将不会局限于特定的框架,即使将来需要用到现成的框架或者自行构建框架,仍然会从本书中获益。本书除了讲解具体的Web开发方法,还介绍如何对Go Web应用进行测试,如何使用Go的并发特性提高Web应用的性能,以及如何在Heroku、Google App Engine、Digital Ocean等云平台上部署Go Web应用;此外,书中还传授一些Go Web开发方面的经验和提示。这些重要的实践知识将帮助读者快速成为真正具有生产力的Go Web开发者。 阅读本书需要读者具备基本的Go语言编程技能并掌握Go语言的语法。本书适合所有想用Go语言进行Web开发的读者阅读,无论是Web开发的初学者还是入行已久的开发者都会在阅读本书的过程中有所收获。
作者介绍
作者简介 Sau Sheong Chang 既是新加坡能源有限公司的数字技术总裁,也是Ruby 社区以及Go社区的活跃贡献者,著有《Go Web编程》《R和Ruby数据分析之旅》等4 部著作。 译者简介 黄健宏(huangz),一位1990年出生的计算机技术图书作译者,《Redis设计与实现》一书的作者,《Redis实战》一书的译者。除了已出版的两本作品之外,他还创作和翻译了《Go标准库中文文档》《Redis命令参考》《SICP解题集》等一系列开源文档。要了解关于黄健宏的更多信息,请访问他的个人主页huangz.me。
关联推荐
无论是经验老到的gopher,还是刚开始接触Go语言的Web开发者,这都是必不可少的一本书,本书囊括了关于Go Web应用的开发和部署的全部知识
深入理解并发与网络编程:下一代系统构建指南 本书聚焦于现代软件开发中的两大核心挑战:高效的并发处理和健壮的网络通信。它并非一本面向初学者的语言基础教程,而是为那些已经掌握了至少一门主流编程语言(如 C++、Java 或 Python)并希望进入高性能、高并发系统设计领域的专业人士量身打造的进阶读物。 第一部分:并发模型的深度剖析与实践 在当今多核处理器成为常态的计算环境中,如何有效地利用并行性是衡量系统性能的关键。本书将系统地解构不同并发范式背后的理论基础和工程实践,避免了对任何特定语言特性的简单罗列,而是侧重于思想和模式的通用性。 1. 共享内存模型与同步原语的陷阱: 我们首先回顾经典的并发模型——基于共享内存的线程同步。这不是简单地介绍互斥锁(Mutex)和条件变量,而是深入探讨内存屏障(Memory Barriers)的底层工作原理,以及现代处理器乱序执行对并发程序的隐性影响。我们将分析“可见性”和“顺序性”的保证,并提供案例来揭示在缺乏严格同步机制下,数据竞争的微妙表现形式,例如伪共享(False Sharing)问题在缓存一致性协议(如 MESI 协议)中的体现,以及如何通过缓存行对齐(Cache Line Alignment)来优化性能。 2. 消息传递范式:Actor 与 CSP 理论的交锋: 本书将重点探讨更安全、更易于推理的并发设计——消息传递模型。 Actor 模型(面向对象并发): 我们将分析 Actor 模型的数学基础,探讨其在分布式系统中的优势,特别是其如何自然地处理状态隔离和故障容错。内容将涉及如何设计一个健壮的 Actor 框架,包括消息队列的深度实现(如无锁队列和界限缓冲队列)以及死信队列(Dead Letter Queue, DLQ)的处理策略。 Communicating Sequential Processes (CSP) 模型: 我们将深入探究 CSP 模型的理论基础,它如何通过通道(Channels)来协调进程间的交互。本书不会停留在表面概念,而是会构建一个轻量级的、基于事件驱动的调度器,以模拟 CSP 运行时环境,讨论选择(Select)操作在处理多路输入时的效率和阻塞特性。 3. 现代并发的优化策略:无锁数据结构与原子操作: 对于性能敏感的场景,锁的开销往往是瓶颈。本部分将全面介绍如何利用硬件提供的原子操作(Atomic Operations)来构建高性能的数据结构。我们将详细讲解比较并交换(CAS, Compare-And-Swap)操作的机制,并指导读者如何从零开始实现一个健壮的无锁堆栈(Stack)和无锁队列(Queue),并使用基准测试工具严格评估其在不同并发负载下的表现,对比其与传统锁结构的性能差异。 --- 第二部分:高性能网络编程与协议栈解析 现代应用几乎无一例外地依赖于网络。本书专注于如何构建能够处理海量连接和高吞吐量数据的网络服务,涵盖从操作系统内核到应用层协议的全景视图。 1. 操作系统网络 I/O 模型的演进: 我们不会简单地介绍阻塞 I/O 和非阻塞 I/O,而是聚焦于内核层面的高效 I/O 多路复用技术。 I/O 多路复用的深入比较: 详细分析 `select/poll` 的局限性,并重点剖析 `epoll` (Linux) 和 `kqueue` (BSD/macOS) 的内部实现机制。内容将包括事件通知模型(边缘触发与水平触发的区别)以及如何设计一个高效的事件分发器,以最小化上下文切换和系统调用开销。 异步 I/O (AIO) 的权衡: 探讨真正的异步 I/O 模型(如 Linux 的 `io_uring`),分析其在用户空间和内核空间之间数据传输的开销,以及它如何解决传统 I/O 模型的“惊群效应”(Thundering Herd Problem)。 2. 传输层协议的深度调优: TCP 协议是绝大多数可靠网络应用的基础。本书提供了一套系统化的 TCP 调优手册,超越了简单的系统参数修改。 拥塞控制算法的实战应用: 分析 Cubic、BBR 等主流拥塞控制算法的工作原理。读者将学习如何根据自身服务的网络环境(如高延迟、高带宽或丢包率高的环境)选择或定制最合适的拥塞控制策略。 TCP 连接管理与性能陷阱: 深入解析 TCP 慢启动、拥塞避免阶段的动态变化。重点剖析 TIME_WAIT 状态的资源占用问题,以及如何通过 SO_REUSEPORT 等机制来优化高并发服务器的端口复用。 3. 应用层协议设计与序列化: 在构建分布式系统时,选择高效的通信协议至关重要。 RPC 框架的底层实现: 本部分详细拆解远程过程调用(RPC)框架的核心组件,包括服务发现、请求路由和负载均衡策略。我们将关注编码/解码(Serialization/Deserialization)的性能瓶颈,并对比 JSON、Protocol Buffers 和 FlatBuffers 等序列化技术在空间效率、解析速度和向前/向后兼容性方面的优劣。 构建高效的基于流的协议: 讨论如何设计具有清晰界定符或长度前缀的自定义流式协议,以确保数据在不可靠网络上传输时的完整性和顺序性,这是构建高性能网关和代理服务的基础。 --- 目标读者与先决条件 本书假定读者具备: 1. 扎实的计算机科学基础,熟悉操作系统(进程、线程、内存管理)和数据结构原理。 2. 对网络基础(TCP/IP 协议栈)有清晰的理解。 3. 熟悉至少一种面向对象的或系统级编程语言(如 C++ 或 Rust),并对性能优化有强烈的兴趣。 阅读本书,您将能够从“如何使用”提升到“如何设计和实现”的层面,构建出下一代具备高并发、低延迟特性的复杂软件系统。