出版社:电子工业出版社
出版日期:2013-6-1
ISBN:9787121200915
作者:谢孟军
页数:329页
作者简介
《Go Web编程》介绍如何用Go语言进行Web应用的开发,将Go语言的特性与Web开发实战组合到一起,帮读者成功地构建跨平台的应用程序,节省Go语言开发Web的宝贵时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解。
在《Go Web编程》中,读者可以更加方便地找到各种编程问题的解决方案,内容涵盖文本处理、表单处理、Session管理、数据库交互、加/解密、国际化和标准化,以及程序的部署维护等运维方面的知识,最后还介绍了一个快速开发的框架帮助您迅速进入Go语言的Web开发。
书籍目录
第1章 GO语言环境配置
1.1 Go语言安装
Go语言的三种安装方式
Go语言源码安装
Go语言标准包安装
第三方工具安装
1.2 GOPATH与工作空间
GOPATH设置
应用目录结构
编译应用
获取远程包
程序的整体结构
1.3 Go语言命令
Go语言命令
go build
go clean
go fmt
go get
go install
go test
go doc
其他命令
1.4 Go语言开发工具
LiteIDE
Sublime Text
Vim
Emacs
Eclipse
IntelliJ IDEA
1.5 总结
第2章 Go语言基础
2.1 你好,Go
程序
详解
小结
2.2 Go语言基础
定义变量
常量
内置基础类型
一些技巧
array、slice、map
2.3 流程和函数
流程控制
函数
2.4 struct类型
struct
2.5 面向对象
method
2.6 interface
interface
2.7 并发
goroutine
channels
Buffered Channels
Range和Close
Select
超时
runtime goroutine
2.8 总结
第3章 Web基础
3.1 Web工作方式
URL和DNS解析
HTTP协议详解
请求实例
3.2 GO语言搭建一个Web服务器
http包建立Web服务器
3.3 Go语言如何使Web工作
Web工作方式的几个概念
分析http包运行机制
3.4 Go语言的http包详解
Conn的goroutine
ServeMux的自定义
Go语言代码的执行流程
3.5 总结
第4章 表单
4.1 处理表单的输入
4.2 验证表单的输入
必填字段
数字
中文
英文
电子邮件地址
手机号码
下拉菜单
单选按钮
复选框
日期和时间
身份证号码
4.3 预防跨站脚本
4.4 防止多次递交表单
4.5 处理文件上传
客户端上传文件
4.6 总结
第5章 访问数据库
5.1 database/sql接口
sql.Register
driver.Driver
driver.Conn
driver.Stmt
driver.Tx
driver.Execer
driver.Result
driver.Rows
driver.RowsAffected
driver.Value
driver.ValueConverter
driver.Valuer
database/sql
5.2 使用MySQL数据库
MySQL驱动
示例代码
5.3 使用SQLite数据库
驱动
实例代码
5.4 使用PostgreSQL数据库
驱动
实例代码
5.5 使用beedb库进行ORM开发
安装
如何初始化
插入数据
更新数据
查询数据
删除数据
关联查询
Group By和Having
进一步的发展
5.6 NOSQL数据库操作
redis
MongoDB
5.7 总结
第6章 Session和数据存储
6.1 Session和Cookie
Cookie
Session
小结
6.2 Go语言如何使用Session
Session创建过程
Go语言实现Session管理
6.3 Session存储
6.4 预防Session劫持
Session劫持过程
Session劫持防范
6.5 总结
第7章 文本处理
7.1 XML处理
解析XML
输出XML
7.2 JSON处理
解析JSON
生成JSON
7.3 正则处理
通过正则判断是否匹配
通过正则获取内容
7.4 模板处理
什么是模板
Go语言模板使用
模板中如何插入数据
Must操作
嵌套模板
小结
7.5 文件操作
目录操作
文件操作
7.6 字符串处理
字符串操作
字符串转换
7.7 总结
第8章 Web服务
8.1 Socket编程
什么是Socket
Socket如何通信
Socket基础知识
TCP Socket
UDP Socket
小结
8.2 WebSocket
WebSocket原理
Go语言实现WebSocket
8.3 REST
什么是REST
RESTful的实现
小结
8.4 RPC
RPC工作原理
Go RPC
小结
8.5 总结
第9章 安全与加密
9.1 预防CSRF攻击
什么是CSRF
CSRF的原理
如何预防CSRF
总结
9.2 确保输入过滤
识别数据
过滤数据
区分过滤数据
小结
9.3 避免XSS攻击
什么是XSS
XSS的原理
如何预防XSS
小结
9.4 避免SQL注入
什么是SQL注入
SQL注入实例
如何预防SQL注入
小结
9.5 存储密码
普通方案
进阶方案
专家方案
总结
9.6 加密和解密数据
base64加解密
高级加解密
小结
9.7 总结
第10章 国际化和本地化
10.1 设置默认地区
什么是Locale
设置Locale
小结
10.2 本地化资源
本地化文本信息
本地化日期和时间
本地化货币值
本地化视图和资源
小结
10.3 国际化站点
管理多个本地包
自动加载本地包
template mapfunc
小结
10.4 总结
第11章 错误处理,调试和测试
11.1 错误处理
Error类型
自定义error
错误处理
小结
11.2 使用GDB调试
GDB调试简介
常用命令
调试过程
小结
11.3 Go语言怎么写测试用例
如何编写测试用例
如何编写压力测试
小结
11.4 总结
第12章 部署与维护
12.1 应用日志
seelog介绍
基于seelog的自定义日志处理
发生错误发送邮件
使用应用日志
小结
12.2 网站错误处理
错误处理的目标
如何处理错误
如何处理异常
小结
12.3 应用部署
daemon
Supervisord
小结
12.4 备份和恢复
应用备份
MySQL备份
MySQL恢复
redis备份
redis恢复
小结
12.5 总结
第13章 如何设计一个Web框架
13.1 项目规划
gopath以及项目设置
应用程序流程图
目录结构
框架设计
总结
13.2 自定义路由器设计
HTTP路由
默认的路由实现
beego框架路由实现
13.4 日志和配置设计
日志和配置的重要性
beego的日志设计
beego的配置设计
应用指南
13.5 实现博客的增删改
博客目录
博客路由
数据库结构
控制器
model层
view层
13.6 总结
第14章 扩展Web框架
14.1 静态文件支持
beego静态文件实现和设置
Bootstrap集成
14.2 Session支持
Session集成
Session使用
14.3 表单及验证支持
表单和验证
表单类型
表单验证
14.4 用户认证
HTTP Basic和HTTP Digest认证
oauth和oauth2的认证
自定义认证
14.5 多语言支持
i18n集成
多语言开发使用
14.6 pprof支持
beego支持pprof 使用入门
14.7 小结
附录A 参考资料
编辑推荐
《Go Web编程》编辑推荐:Go语言性能好、语法简单、开发效率高!一起来探索Go语言吧!《Go Web编程》特别适合从事PHP/Python/Ruby/Node.js等Web开发的读者,通过《Go Web编程》可以了解编译型语言怎么写Web应用开发,系统底层怎么进行网络通信。还适合从事C/C++/Java等系统级别开发的读者,通过《Go Web编程》可以了解到Web开发的一些知识,例如,如何处理表单,如何进行用户认证以及Session/Cookie等各方面的Web应用。
前言
缘起自从一年半之前看到许式伟的博客,我认识了Go这一门语言,发现Go是C系的,个人又偏爱C语言,所以就开始了Go语言的学习之路,用三天时间学习了Go语言的所有语法和基础知识。恰逢当时手上有一些小项目练手,在项目开发中进一步发现Go语言具有三大优点:第一,性能好,我的Mac能够跑2万左右的并发;第二,语法简单,对于以前有C语言基础的人来说非常容易上手,我仅用一天时间就熟悉了基本语法,Go语言是一个上手即用的语言;第三,开发效率高,目前有很多编辑器支持Go语言,对于开发效率有很大的提升,一般的小项目半天就能解决。通过一年多来对Go语言项目的实战累积,我越来越觉得Go是一门工程语言,而不是其他学院派。无论是开发、测试、部署、项目规模的扩展,或者是团队协作,Go语言考虑都非常周到;而且其语法恰当好处,不多不少,够用就是它的设计原则,所以Go语言非常适合项目的开发。选择Go语言,还有一部分是缘于我的个人崇拜,Go语言的作者不乏鼎鼎大名的牛人:Robert Griesemer、Rob Pike和Ken Thompson,他们曾设计C语言和Unix系统,后来隶属Plan9团队。重要的是,在Go语言的完全开源中,很多名人都参与了进来,使得这个项目越来越完善:Go1.1出来后,性能提升了30-50%,而且GC(垃圾回收机制)已经达到了非常高的水准。相信在开源社区和大牛的共同推动下,Go语言会茁壮成长。Go Web我以前是PHP开发者,有十年左右的Web开发经验,但在Go语言的显著优势下,逐渐走向了Go语言的开发之路。我发现Go语言虽然有很强大的网络编程库,但是在Web编程方面没有详细的介绍,也缺少一些比较实用的库,所以结合先前的Web开发经验,以及Go语言本身的网络编程库,开始了这本书的创作过程,希望更多同行能够加入到Go语言的开发行列。这本书主要分三部分,第一部分是Go语言的基础语法,主要介绍了Go语言的一些语法特性、环境配置和开发工具。第二部分是Web开发,主要介绍了Go Web的基本原理、表单处理、数据库操作、Session和Cookie处理、文本处理、Socket编程、安全加密、国际化和本地化、错误处理和调试、如何部署和维护等知识点,并且针对整个Web开发中需要用到的知识点,结合Go语言代码的原理进行了详细的介绍,针对Go语言在Web开发方面不存在的工具,提供了详细的实现方式。第三部分是应用框架beego,主要介绍了beego框架的设计、实现及应用。目前书中提到的一些功能都可以在我的github找到相应的代码,方便读者进行深入的研究。这是一本关于Web的书,我觉得特别适合以下几种开发者:如果你是PHP或者其他动态语言爱好者,Go语言不一定能带给你很大的惊喜,因为原来的速度不是根本问题。但如果是类似API应用方面,使用Go语言之后,你会发现性能得到了一个量的提升,这本书中就有详细介绍API开发的实例。如果你是C语言爱好者,强烈建议你学习和使用Go语言。Go语言称为21世纪的C语言,它不仅可以调用C语言程序,又可以提供足够的便利;虽然速度上稍有牺牲,但无关大雅。大部分场景下,Go语言都能带给你与C语言媲美的性能,对于某些确实性能关键的场合,我们也可以通过cgo,让Go语言和C语言搭配使用。如果你是Java爱好者,那么也建议你学习一下Go语言,因为Java能给你的,Go语言能给得更好。如果你是C++爱好者,那么赶紧来看看Go语言吧,因为光学习C++特性的时间,已经可以开发多个Go语言项目了。致谢Go社区里的同仁们给了我很大的支持,如果没有他们的反馈和帮助,我就不能顺利完成本书。非常感谢四月份平民、Hong Ruiqi、BianJiang、Oling Cat、Wenlei Wu、polaris、雨痕等网友的热心指导,还有很多github中的贡献者,本书是在大家共同协作努力下才得以完成。我还要感谢符隆美编辑对我的支持,当我才思枯竭、延期脱稿时,她经常鼓励我、开导我,使我在压力下完成此书并最终出版。最后要感谢家庭对我的莫大支持,妻子刘玉娟帮我收集资料,帮忙完成了本书的大部分整理工作,儿子们倾听我的思路想法,没有他们,我也没有毅力完成写作,谢谢他们。谢孟军2013年4月于上海
内容概要
谢孟军,网名ASTA谢,现就职于盛大云,高级研究员,技术经理,主要从事盛大云分发的系统研发工作,努力为盛大游戏、盛大文学、酷六等提供更好的CDN服务。热爱技术,尤其关注实现服务器端高性能、高可用等相关技术。开发了beego、beedb等各类基于Go语言的开源框架和库,致力于Go语言的推广和研究。
名人推荐
为什么我可以如此坚定地相信,选择Go语言不会有错,并且相信Go语言会成为未来十年最流行的语言?除了Go语言的并发编程模型深得我心外,Go语言的各种语法特性显得那么深思熟虑、卓绝不凡,其对软件系统架构的领悟,让我深觉无法望其项背,处处带给我惊喜。——许式伟,七牛云存储CEOGo语言的目标是成为集合解释型编程的轻松、动态类型语言的高效及静态类型语言的安全三大优点的编译型语言,同时它对网络编程与多核计算支持非常好。——郭理靖,京东商城云平台资深工程师,高级经理作者是国内较早研究GO语言在网络应用的实践和推广者,该书讲述了GO语言在Web开发方面的应用,例子详实,文章充实。不管是新手还是老鸟,读之受益匪浅。——网友@waylau作者长期的Web开发经验和大量的实用技巧,使得本书的实用性远非其他空讲语法及概念的书籍可比。无论作为Go语言入门教程还是作为工具书,都是读者极好的选择。——网友@xgdapg认真读过该书,作者讲解深入浅出,并且用beego和beedb开发了几个自己的项目,非常好,适合新人。——网友@JessonChan作者作为国内Go语言的践行先驱,出手确实不一般。本书无论是学习Go语言还是Web编程相关概念和工具,都是一本值得反复阅读的好书。——网友@aaronyue作为谷粉同是也是个码农,当然不能放过Go语言,这本书让我受益匪浅,非常感谢!——网友@Xuyuanp
章节摘录
版权页: 插图: 过滤用户数据是Web应用安全的基础,是验证数据合法性的过程。通过对所有的输入数据进行过滤,可以避免恶意数据在程序中被误信或误用。大多数Web应用的漏洞都是因为没有对用户输入的数据进行恰当过滤所引起。 我们介绍的过滤数据分成三个步骤。 1.识别数据,搞清楚需要过滤的数据来自于哪里。 2.过滤数据,弄明白我们需要什么样的数据。 3.区分己过滤及被污染数据,如果存在攻击数据,保证过滤之后可以让我们使用更安全的数据。 识别数据 “识别数据”作为第一步是因为在你不知道“数据是什么,它来自于哪里”的前提下,你也就不能正确地过滤它。这里的数据是指所有源自非代码内部提供的数据。例如,所有来自客户端的数据,但客户端并不是唯一的外部数据源,数据库和第三方提供的接口数据等也可以是外部数据源。 我们通过G0语言非常容易识别由用户输入的数据,G0语言通过r.ParseForm之后,把用户POST和GET的数据全部放在了r.Form里面。其他的输入更难识别,例如,r.Header中的很多元素是由客户端所操纵的。常常很难确认其中的哪些元素组成了输入,所以,最好的方法是把里面所有的数据都看成是用户输入(例如r.Header.Get(”Accept—Charset”)这也看做是用户输入,虽然这些大多数是浏览器操纵的)。 过滤数据 知道数据来源之后,就可以过滤它了。过滤是一个有点正式的术语,它在平时表述中有很多同义词,如验证、清洁及净化。尽管这些术语表面意义不同,但它们都是指同一个处理:防止非法数据进入应用。 过滤数据有很多种方法,有一些安全性较差。最好的方法是把过滤看成一个检查的过程,在你使用数据之前都检查一下、看它们是否符合合法数据的要求。不要试图好心地去纠正非法数据,而要让用户按你制定的规则去输入数据。历史证明了试图纠正非法数据往往会导致安全漏洞。举个例子:“某银行系统升级之后,如果密码后面两位是0,只要输入前面四位就能登录系统”,这是一个非常严重的漏洞。