您当前的位置: 首页 > 

Go Web 编程

蔚1 发布时间:2018-11-06 11:54:44 ,浏览量:2

内容简介

本书全面介绍使用 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 部著作。

本书内容 前言

自互联网从20世纪90年代中期诞生以来,Web 应用就以这样或那样的方式存在了。虽然 Web 应用在最初只能传输静态网页,但它很快就升级和演变成了一个令人眼花缭乱、能够传输各种数据以及实现各种功能的动态系统。无独有偶,本人也是从20世纪90年代中期开始接触 Web 应用开发的,在迄今为止的职业生涯当中,我把大部分时间都花费在了大规模 Web 应用的设计、开发以及团队管理上面,并且在这期间还使用过多种不同的编程语言和框架,其中包括 Java、Ruby、Node.js、PHP、Perl、Elixir 甚至是 Smalltalk。

几年前,我因为一次偶然的机会接触到了 Go 语言,并迅速被它的简单和清爽直率所吸引,而当我意识到只使用 Go 的标准库就可以快速地构建完整、高效并且可扩展的 Web 应用和服务时,我对 Go 的喜爱又更进了一步。使用 Go 语言编写的代码不仅易懂、直截了当,而且还能够快速、简单地编译成一个独立的可部署二进制文件。更关键的是,我不必投入大量服务器就可以让自己的 Web 应用变得可扩展且具备生产能力。很自然地,所有的这些优点都使 Go 成为了我在 Web 应用开发方面最新的心头好语言。

从当初传输静态内容到现在通过 HTTP 传输动态数据,从当初使用服务器传输 HTML 内容,到现在使用客户端单页应用去处理通过 HTTP 传输的 JSON 数据,Web 应用的开发方式已经发生了翻天覆地的变化。几乎就在 Web 应用闪亮登场的同时,Web 框架也应运而生,并使程序员可以更为容易地去开发 Web 应用。这二十多年以来,绝大多数编程语言都会有至少一个 Web 应用框架,其中很多语言甚至会有一大堆框架可用,而当今出现的绝大多数应用都是 Web 应用。

尽管 Web 应用框架的风靡使开发 Web 应用变得更加容易了,但这些框架在带来方便的同时也隐藏了大量的细节——Web 应用开发者对于万维网的运作方式知之甚少甚至一窍不通,这样的情况正在变得越来越常见。幸运的是,通过 Go 语言,我发现了一种正确地教授 Web 应用开发基础知识的绝佳工具,它能够让 Web 应用开发重新回到简单直接的状态:程序需要考虑的就是如何处理 HTTP 协议,以及如何通过 HTTP 协议传输内容和数据,并且满足这两个要求只需要用到 Go 语言本身提供的工具——不需要用到外部库,也不需要用到外部的依赖。

在拿定主意之后,我就向 Manning 出版社提交了一个撰写 Go 语言编程书籍的构思,这个构思关注的是如何在只使用标准库的情况下,向读者传授从零开始构建 Web 应用的方法,而 Manning 出版社也很快就同意了我的构思并开启了这个项目。尽管本书的撰写工作持续了一段时间才得以完成,但是在写作的过程中,抢先预览版带来的反馈总是不断地鼓舞着我。最后,我希望读者能够像我享受创作本书的过程一样,享受阅读本书的过程,并且在这个过程中能够有所收获。

致谢

本书最初的想法是在只使用标准库的情况下教授基本的 Go Web 编程知识。说实在的,刚开始的时候我并不确定这个想法是否能够行得通,但那些花费自己血汗钱来购买本书抢先预览版的读者给了我鼓励和动力来实现这个想法,因此在这里我要向我的读者们致以诚挚的感谢!

写书是一项团队协作活动,尽管本书的封面上只记载了我一个人的名字,但实际上大量幕后人员也为这本书付出了自己的心血,他们分别是:

  • Marina Michaels,来自地球另一侧的一位勤劳且高效的编辑,她总是不知疲倦地配合我的工作,并且为了我们之间巨大的时差而不断地调整自己的日程表;

  • Manning 出版社的相关工作人员:文字编辑 Liz Welch 和校对 Elizabeth Martin,他们的火眼金睛让错误无处可藏,负责营销和推广本书的 Candace Gillhoolley 和 Ana Romac,以及将我的原稿变为本书的 Kevin Sullivan 和 Janet Vail;

  • Jimmy Frasché 对我的原稿进行了一次完整的技术校对,而我的审稿人 Alex Jacinto、Alexander Schwartz、Benoit Benedetti、Brian Cooksey、Doug Sparling、Ferdinando Santacroce、Gualtiero Testa、Harry Shaun Lippy、James Tyo、Jeff Lim、Lee Brandt、Mike Bright、Quintin Smith、Rebecca Jones、Ryan Pulling、Sam Zaydel 和 Wes Shaddix 则在撰写原稿的4个阶段中为我提供了大量有价值的反馈;

  • 这本书的抢先预览版一经释出,我在新加坡 Go 社区的朋友们就迫不及待地把它向全世界广而告之了,特别值得一提的是 Kai Hendry,他为本书制作了一个详细的评论视频。

另外,我还要感谢 Go 的创造者 Robert Griesemer、Rob Pike 和 Ken Thompson,以及net/httphtml/template等 Web 标准库的开发者,特别是 Brad Fitzpatrick,没有他们的辛勤付出,这本书就不可能出现。

最后,也是最必不可少的,我要感谢我的家人,包括我亲爱的妻子 Wooi Ying,以及在身高方面后来居上的我的儿子 Kai Wen。我希望自己能够通过创作这本书给他带来启发,我也希望他会自豪地阅读这本书,并从中有所收获。

关于本书

本书将完整地介绍使用 Go 语言开发 Web 应用所需的全部基本概念,并且在这个过程中只使用 Go 语言自带的标准库。尽管本书的部分章节会对其他库以及其他主题进行讨论,比如如何测试 Web 应用以及如何部署 Web 应用,但本书的主要目的还是教读者如何在只使用 Go 标准库的情况下进行 Web 开发。

本书要求读者具备基本的 Go 编程技能并掌握 Go 语言的语法。如果读者不具备这些知识,可以阅读由 William Kennedy、Brian Ketelsen 和 Erik St. Martin 创作的 Go in Action[1]一书,该书也是由 Manning 出版社出版的。由 Addison-Wesley 出版社出版、Alan Donovan 和 Brian Kernighan 创作的 The Go Programming Language[2]也是一本值得一读的好书。除了以上提到的两本书之外,网上也有非常多免费的 Go 教程可供浏览,比如,Go 官方网站的《Go 入门教程》(A Tour of Go)(http://tour.golang.org/)就是一个很棒的例子。

内容编排

本书由10章和一个附录组成。

第1章会介绍使用 Go 开发 Web 应用的方法,并阐述这种做法的优点所在。除此之外,本章还会对 HTTP 协议等构成 Web 应用的关键概念做深入浅出的介绍。

第2章会以一步一个脚印的方式,带领读者去构建一个简单的网上论坛,以此来向读者展示如何使用 Go 构建一个典型的 Web 应用。

第3章会更加详细地展示使用 net/http 包接收 HTTP 请求的方法。读者将学会如何编写 Go Web 服务器监听 HTTP 请求,以及如何使用处理器和处理器函数处理这些请求。

第4章会继续介绍处理 HTTP 请求的相关细节,重点讲述 Go 是如何处理请求并返回响应的。除此之外,读者还将学会如何从 HTML 表单中获取数据以及如何使用 cookie。

第5章将会介绍由text/template库和html/template库组成的 Go 模板引擎。读者将会看到 Go 提供的各种模板机制,并学会如何使用 Go 的布局(layout)。

第6章将会对 Go 的存储策略进行讨论。读者将学会如何通过结构将数据存储到内存里面,如何通过 CSV 格式以及 gob 二进制格式将数据存储到文件系统里面,以及如何通过 SQL 和 SQL 映射器去访问关系数据库。

第7章将展示使用 Go 语言构建 Web 服务的方法。读者不仅会学到如何使用 Go 语言构建一个简单的 Web 服务,还会学到如何使用 Go 语言创建并分析 XML 数据和 JSON 数据。

第8章将向读者传授在不同层级中测试 Go Web 应用的不同方法,其中包括单元测试、基准测试以及 HTTP 测试;除此之外,这一章还会简单介绍几个第三方测试库。

第9章会介绍在 Web 应用中使用 Go 语言的并发特性的方法。读者将会了解到 Go 语言的各个并发特性,并学会如何使用这些特性提高一个图像生成 Web 应用的性能。

第10章是本书的最后一章,它将展示 Go Web 应用的部署方法。读者将会学到如何把应用部署到独立的服务器上,如何把应用部署到 Heroku、Google App Engine 之类的云平台上,以及如何把应用部署到 Docker 容器里面。

最后,本书的附录会展示在不同平台上安装和设置 Go 环境的方法。

代码的约定以及下载

本书通过代码清单以及正文内嵌的方式展示了大量源代码。为了跟一般的正文区别开来,书中的源代码都会使用等宽字体。为了凸显某些代码在不同章节之间的区别,又或者为了强调正文中讨论的某些代码,本书有时候也会以加粗的方式显示代码。

除此之外,本书的电子书还会使用彩色字体来凸显代码命令以及代码输出:

curl -i 127.0.0.1:8080/writeHTTP/1.1 200 OKDate: Tue, 13 Jan 2015 16:16:13 GMT Content-Length: 95Content-Type: text/html; charset=utf-8Go Web ProgrammingHello World

本书展示的所有代码都可以在 www.manning.com/books/go-web-programming 和 github.com/ sausheong/gwp 找到[3]。

作者简介

郑兆雄(Sau Sheong Chang),现任新加坡能源有限公司数字技术总裁,在此之前他曾经担任过 PayPal 的消费者工程经理。Sau 是 Ruby 社区和 Go 社区一位活跃的贡献者,除了创作书籍之外,他还为开源项目提交代码,并在各种技术研讨会和技术会议上发言。

enter image description here

作者在线论坛

购买本书英文版的读者可以免费地访问由 Manning 出版社开设的私有 Web 论坛,可以在论坛里面撰写书评、提出技术问题并接受来自作者和其他读者的帮助。为了访问并订阅论坛,需要先使用浏览器访问 www.manning.com/books/go-web-programming,这个页面会告诉读者注册账号和访问论坛的方法,除此之外,该页面还列举了论坛提供的各种帮助以及论坛的各项规章制度。

Manning 出版社承诺为读者提供论坛作为场所,以便读者之间以及读者和作者之间可以进行有意义的对话,但 Manning 并不保证作者的参与程度——作者对论坛的任何贡献都是自愿并且无偿的,因此读者应该尽可能地提出一些具有挑战性的问题以便引起作者的兴趣。

只要本书仍在正常销售,本书的作者在线论坛以及论坛上已有的帖子就会一直可供访问。

[1] Go in Action 的中文版已由人民邮电出版社出版,中文版书名为《Go 语言实战》。——译者注

[2] The Go Programming Language 的中文版已由机械工业出版社出版,中文版书名为《Go 程序设计语言》。——译者注

[3] 本书展示的所有代码也可以在异步社区(www.epubit.com.cn)中本书页面免费下载。——编者注

关于封面插图

本书的封面插图系 Paolo Mercuri(1804—1884)所作,标题为“穿着中世纪服装的男人”,该插图来源于 Camille Bonnard 搜集并编辑的Costumes Historiques(服装史)多卷本,该书于19世纪50或60年代在巴黎出版,它搜集了大量12世纪、13世纪、14世纪和15世纪的历史服装。随着异国风情和历史文明在19世纪风靡,人们开始着迷于这类服装收藏本,并借此去探索自己所在的世界以及已经远去的旧世界。

在这一历史画册中,Mercuri 丰富多彩的画作让我们生动地回想起了数百年前,世界各地不同城市和地区之间的文化差异。无论是在街道还是乡间,仅仅通过人们的着装就可以八九不离十地辨识他们的社会地位、从事的行业和职业。在经历了数个世纪的变迁以后,人们的着装方式已经发生了很大的变化,当初丰富多彩的地区多样性也已逐渐消失。时至今日,仅仅通过着装已经很难区分不同大洲的居民了,更别说想要知道他们所在的国家和城市、知悉他们的社会地位和职业了。乐观地讲,也许我们已经放弃了追求文化上的多样性,转为拥抱更丰富多彩也更快节奏的技术生活了。

在计算机书籍正在变得越来越相似、越来越同质化的今天,Manning 出版社希望通过 Mercuri 的作品,将数个世纪以前丰富多彩的地区生活融入图书封面,以此来赞美计算机行业不断创新和敢为人先的精神。

第一部分 Go 与 Web 应用

Web 应用是当今使用最为广泛的一类软件应用,连接至互联网的人们基本上每天都在使用 Web 应用。因为很多看上去像是原生应用的移动应用都在内部包含了使用 Web 技术构建的组件,所以使用移动设备的人们实际上也是在使用 Web 应用。

因为编写 Web 应用必须对 HTTP 有所了解,所以接下来的两章将对 HTTP 进行介绍。除此之外,我们还会了解到使用 Go 语言编写 Web 应用的优点,并且实际使用 Go 语言来构建一个简单的网上论坛,然后鸟瞰 Web 应用的各个组成部分。

第1章 Go 与 Web 应用 第2章 ChitChat 论坛 第二部分 Web 应用的基本组成部分 第3章 接收请求 第4章 处理请求(上) 第4章 处理请求(下) 第5章 内容展示(上) 第5章 内容展示(下) 第6章 存储数据(上) 第6章 存储数据(下) 第三部分 实战演练 第7章 Go Web 服务(上) 第7章 Go Web 服务(下) 第8章 应用测试(上) 第8章 应用测试(下) 第9章 发挥 Go 的并发优势(上) 第9章 发挥 Go 的并发优势(下) 第10章 Go 的部署 附录 安装和设置 Go

阅读全文: http://gitbook.cn/gitchat/geekbook/5b7a449e9a18602b5bc07a97

关注
打赏
1688896170
查看更多评论

蔚1

暂无认证

  • 2浏览

    0关注

    4645博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2408s