张子阳的博客

首页 读书 技术 店铺 关于
张子阳的博客 首页 读书 技术 关于

Go Web编程

2019-06-12 张子阳 推荐:

记得之前学.net和C#的时候,有一段时间几乎把市面上所有相关的书都看了一遍。因为已经熟练了一门语言,所以学Go的时候就没有花太多的精力,一直是边看边学的状态。学习的资料大多是官网和其他一些站点,也下载了几本Go的电子书,但基本上都没有从头看完,而是哪里遇到问题了,就去查看相关的章节。这种做法的缺点是不够系统,所以就想再买两本书看一下。因为大多数时间是做Web相关的开发,于是就买了这本《Go Web编程》。

读完以后,总的来说,这本书讲的内容都是一些基础又重要的知识,可以说是中规中矩。对于初学者比较适合,但对于有经验的开发人员来说,就比较容易了,几天就可以看完并且吸收个八九不离十。值得称赞的是,这本书的翻译也比较好,读起来很流畅。

这本书共分了10个章节。前面2章对Web尤其是Http协议做了一个快速的概览,并以一个Web论坛作为例子,简单实现了这个应用。主要是让初学者对Web开发有一个快速的认识,可以看到“成品”。尤其是第2章,几乎涉及了Web开发的每个环节,但都是蜻蜓点水一般轻轻掠过,只演示流程,不讲解过程。

接下来的3、4、5、6章应当算作是本书的核心部分了。

第3、4两章讲解了接收和处理请求,接收请求其实就是请求路由:即基于一个URL和请求方法,如何转至合适的处理程序。在Go中,叫做多路复用器(ServerMux)。处理请求,实际上就是理解Request结构,以及获取Request中的信息,包括表单、上传文件、Cookie等。

第5章,讲了如何向客户端展示内容,主要是通过text和html模板引擎。这里有意思的是讲了Web的历史,提出了PHP等解释型语言其实在早期就是一个模板引擎,只是后来在引擎中加入了越来越多的逻辑,最后逐步发展成了一门语言。这里也引出了开发界的一个普遍的争论点 :是否要在模板中包含逻辑。我的看法符合Go的实现:除了最基本的循环和判断,模板不应当包含任何逻辑,仅仅是展示数据。实际上,如果你想要在Go的模板中去写逻辑,你会发现几乎无法办到。

第6章,讲了存储数据,也叫数据持久化。举了文件和数据库两个例子。这里实在是过于基础,有经验的开发人员可以直接跳过。

最后4章实战部分,讲了一些开发中常遇到的东西。

第7章,讲了REST风格的Web服务,因为REST主要是返回数据。因此这一章实际是讲XML和JSON的序列化和反序列化。

第8章,应用测试,讲使用test包进行测试。在实际工作中,因为接口测试结果要给前端人员去用,所以都是将测试用例放到Post Man(一款http请求工具)中,然后共享给前端人员。这里还举了一个例子讲了如何实现Go的依赖注入,使得在早期可以创建一个Mock数据存储,以方便测试。

第9章,讲了Go的并发,主要是同步锁机制和Channel机制,着重讲了Channel机制。并发这部分可能会很复杂,有很多常见的模式,作者这里也是浅尝辄止,只给了一个Fan-In模式的例子,实际上在使用select语句的过程中,会有很多隐藏的陷阱,并未深入提及。这章还讲了一个多线程生成马赛克的例子,算是一个应用实践。

第10章,讲了Go的单机、云厂商以及Docker部署。这一章云厂商的部署举的都是国外的例子,Google云等,而国内主要都是阿里云和腾讯云,参考意义不大。

总的来说,这是一本针对初级开发人员的书,对于更有经验的人员,可以快速阅读一遍加深一些印象。

感谢阅读,希望这篇文章能给你带来帮助!