Go Web编程(Go语言性能好、语法简单、开发效率高!)
谢孟军 著
ISBN 978-7-121-20091-5
2013年6月出版
定价65.00元
352页
16开
编辑推荐
Go语言性能好、语法简单、开发效率高!一起来探索Go 语言吧!
本书特别适合从事PHP/Python/Ruby/Node.js等Web开发的读者,通过本书可以了解编译型语言怎么写Web应用开发,系统底层怎么进行网络通信。
还适合从事C/C++/Java等系统级别开发的读者,通过本书可以了解到Web开发的一些知识,例如,如何处理表单,如何进行用户认证以及Session/Cookie等各方面的Web应用。
内容提要
本书介绍如何用Go语言进行Web应用的开发,将Go语言的特性与Web开发实战组合到一起,帮读者成功地构建跨平台的应用程序,节省Go语言开发Web的宝贵时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解。
在本书中,读者可以更加方便地找到各种编程问题的解决方案,内容涵盖文本处理、表单处理、Session管理、数据库交互、加/解密、国际化和标准化,以及程序的部署维护等运维方面的知识,最后还介绍了一个快速开发的框架帮助您迅速进入Go语言的Web开发。
目录
第1章 GO语言环境配置 1
1.1 Go语言安装 1
Go语言的三种安装方式 1
Go语言源码安装 2
Go语言标准包安装 2
第三方工具安装 5
1.2 GOPATH与工作空间 5
GOPATH设置 5
应用目录结构 6
编译应用 7
获取远程包 8
程序的整体结构 8
1.3 Go语言命令 9
Go语言命令 9
go build 10
go clean 10
go fmt 11
go get 11
go install 12
go test 12
go doc 12
其他命令 12
1.4 Go语言开发工具 13
LiteIDE 13
Sublime Text 16
Vim 19
Emacs 20
Eclipse 23
IntelliJ IDEA 26
1.5 总结 29
第2章 Go语言基础 30
2.1 你好,Go 30
程序 30
详解 31
小结 31
2.2 Go语言基础 32
定义变量 32
常量 33
内置基础类型 33
一些技巧 36
array、slice、map 37
2.3 流程和函数 44
流程控制 44
函数 48
2.4 struct类型 57
struct 57
2.5 面向对象 62
method 62
2.6 interface 70
interface 70
2.7 并发 80
goroutine 80
channels 81
Buffered Channels 82
Range和Close 83
Select 84
超时 85
runtime goroutine 85
2.8 总结 85
第3章 Web基础 87
3.1 Web工作方式 87
URL和DNS解析 88
HTTP协议详解 90
请求实例 95
3.2 GO语言搭建一个Web服务器 95
http包建立Web服务器 96
3.3 Go语言如何使Web工作 97
Web工作方式的几个概念 97
分析http包运行机制 98
3.4 Go语言的http包详解 100
Conn的goroutine 100
ServeMux的自定义 100
Go语言代码的执行流程 102
3.5 总结 103
第4章 表单 104
4.1 处理表单的输入 104
4.2 验证表单的输入 107
必填字段 107
数字 108
中文 108
英文 109
电子邮件地址 109
手机号码 109
下拉菜单 109
单选按钮 110
复选框 110
日期和时间 111
身份证号码 111
4.3 预防跨站脚本 112
4.4 防止多次递交表单 113
4.5 处理文件上传 115
客户端上传文件 117
4.6 总结 119
第5章 访问数据库 120
5.1 database/sql接口 120
sql.Register 120
driver.Driver 121
driver.Conn 122
driver.Stmt 122
driver.Tx 123
driver.Execer 123
driver.Result 123
driver.Rows 123
driver.RowsAffected 124
driver.Value 124
driver.ValueConverter 124
driver.Valuer 125
database/sql 125
5.2 使用MySQL数据库 125
MySQL驱动 126
示例代码 126
5.3 使用SQLite数据库 129
驱动 129
实例代码 129
5.4 使用PostgreSQL数据库 131
驱动 131
实例代码 132
5.5 使用beedb库进行ORM开发 134
安装 134
如何初始化 135
插入数据 136
更新数据 136
查询数据 137
删除数据 138
关联查询 138
Group By和Having 139
进一步的发展 139
5.6 NOSQL数据库操作 139
redis 140
MongoDB 141
5.7 总结 143
第6章 Session和数据存储 144
6.1 Session和Cookie 144
Cookie 146
Session 147
小结 148
6.2 Go语言如何使用Session 148
Session创建过程 149
Go语言实现Session管理 149
6.3 Session存储 154
6.4 预防Session劫持 157
Session劫持过程 157
Session劫持防范 160
6.5 总结 161
第7章 文本处理 162
7.1 XML处理 162
解析XML 163
输出XML 165
7.2 JSON处理 168
解析JSON 168
生成JSON 171
7.3 正则处理 173
通过正则判断是否匹配 174
通过正则获取内容 175
7.4 模板处理 179
什么是模板 179
Go语言模板使用 180
模板中如何插入数据 180
Must操作 186
嵌套模板 186
小结 188
7.5 文件操作 188
目录操作 188
文件操作 189
7.6 字符串处理 191
字符串操作 191
字符串转换 193
7.7 总结 194
第8章 Web服务 195
8.1 Socket编程 195
什么是Socket 196
Socket如何通信 196
Socket基础知识 197
TCP Socket 198
UDP Socket 202
小结 204
8.2 WebSocket 204
WebSocket原理 205
Go语言实现WebSocket 206
8.3 REST 209
什么是REST 209
RESTful的实现 211
小结 213
8.4 RPC 213
RPC工作原理 214
Go RPC 215
小结 223
8.5 总结 223
第9章 安全与加密 224
9.1 预防CSRF攻击 224
什么是CSRF 224
CSRF的原理 225
如何预防CSRF 226
总结 227
9.2 确保输入过滤 228
识别数据 228
过滤数据 228
区分过滤数据 229
小结 230
9.3 避免XSS攻击 230
什么是XSS 230
XSS的原理 231
如何预防XSS 232
小结 232
9.4 避免SQL注入 232
什么是SQL注入 232
SQL注入实例 233
如何预防SQL注入 234
小结 234
9.5 存储密码 235
普通方案 235
进阶方案 236
专家方案 237
总结 237
9.6 加密和解密数据 237
base64加解密 238
高级加解密 238
小结 240
9.7 总结 240
第10章 国际化和本地化 241
10.1 设置默认地区 241
什么是Locale 241
设置Locale 242
小结 244
10.2 本地化资源 244
本地化文本信息 244
本地化日期和时间 246
本地化货币值 246
本地化视图和资源 247
小结 248
10.3 国际化站点 248
管理多个本地包 248
自动加载本地包 249
template mapfunc 250
小结 252
10.4 总结 252
第11章 错误处理,调试和测试 253
11.1 错误处理 253
Error类型 254
自定义error 255
错误处理 256
小结 258
11.2 使用GDB调试 258
GDB调试简介 259
常用命令 259
调试过程 261
小结 264
11.3 Go语言怎么写测试用例 264
如何编写测试用例 265
如何编写压力测试 267
小结 268
11.4 总结 268
第12章 部署与维护 269
12.1 应用日志 269
seelog介绍 269
基于seelog的自定义日志处理 270
发生错误发送邮件 272
使用应用日志 273
小结 273
12.2 网站错误处理 273
错误处理的目标 274
如何处理错误 275
如何处理异常 277
小结 277
12.3 应用部署 278
daemon 278
Supervisord 280
小结 282
12.4 备份和恢复 283
应用备份 283
MySQL备份 284
MySQL恢复 287
redis备份 287
redis恢复 287
小结 287
12.5 总结 287
第13章 如何设计一个Web框架 289
13.1 项目规划 289
gopath以及项目设置 289
应用程序流程图 290
目录结构 291
框架设计 291
总结 291
13.2 自定义路由器设计 292
HTTP路由 292
默认的路由实现 292
beego框架路由实现 293
13.4 日志和配置设计 298
日志和配置的重要性 298
beego的日志设计 298
beego的配置设计 301
应用指南 303
13.5 实现博客的增删改 303
博客目录 304
博客路由 304
数据库结构 304
控制器 305
model层 306
view层 307
13.6 总结 309
第14章 扩展Web框架 310
14.1 静态文件支持 310
beego静态文件实现和设置 310
Bootstrap集成 311
14.2 Session支持 312
Session集成 312
Session使用 314
14.3 表单及验证支持 315
表单和验证 315
表单类型 316
表单验证 316
14.4 用户认证 318
HTTP Basic和HTTP Digest认证 318
oauth和oauth2的认证 319
自定义认证 321
14.5 多语言支持 324
i18n集成 324
多语言开发使用 325
14.6 pprof支持 326
beego支持pprof 326
使用入门 327
14.7 小结 329
附录A 参考资料 330
精彩节摘
推荐序一
很高兴听到谢孟军的《Go Web编程》要出版。当谢孟军找我写推荐序时,尽管工作非常繁忙,我还是一口应承下来了。原因很简单,作为国内首家完全采用Go语言开发的公司,七牛非常乐意见到Go语言社区的繁荣。去年在Google Trends上Golang关键字的搜索指数,中国排在全球首位(比美国多3倍),这是整个中国Go语言社区共同努力的结果。
远在2007年第2届ECUG大会,我讲了《我为什么选择了Erlang》的议题。其中提到了我对未来软件产业趋势的判断:
— 存储与计算向服务端转移
— 从“PC单机”到“强悍的服务器+多元化的终端”(手机、PC、PDA、电视机顶盒、车载终端)
这个趋势判断对我职业生涯的影响非常重大。它促使我放弃了近10年的桌面开发经验(包括大学时期),转向服务端开发。正如我在《我为什么选择了Erlang》中建议的那样:
— 要么就不写程序,要么就写服务器端的程序
— 当然,你也可以去撰写移动终端设备上的代码,在PC平台上做开发的空间很小
于是,我开始了长达四、五年之久的服务端开发最佳实践的探索。直到有一天,我遇到了Go语言。
我从来不认为自己是一个预言师,但关注过我的人可能都知道,我在新浪微博、《Go语言编程》一书中都非常高调地下了一个论断:Go语言将超过C语言、Java,成为未来十年最流行的语言。
为什么我可以如此坚定地相信,选择Go语言不会有错,并且相信Go语言会成为未来十年最流行的语言?除了Go语言的并发编程模型深得我心外,Go语言的各种语法特性显得那么深思熟虑、卓绝不凡,其对软件系统架构的领悟,让我深觉无法望其项背,处处带给我惊喜。
Go语言给我的第一个惊喜,是大道至简的设计哲学。
Go语言是非常简约的语言。简约的意思是少而精,少就是指数级的多。Go语言极力追求语言特性的最小化,如果某个语法特性只是少写几行代码,但对解决实际问题的难度不会产生本质的影响,那么这样的语法特性就不会被加入。Go语言更关心的是如何解决程序员开发上的心智负担。如何减少代码出错的机会,如何更容易写出高品质的代码,是Go语言设计时极度关心的问题。
Go语言追求显式表达。任何封装都是有漏洞的,最佳的表达方式就是用最直白的表达方式。所以也有人称Go语言为“所写即所得”的语言。
Go语言也是非常追求自然(nature)的语言。Go不只是提供极少的语言特性,并极力追求语言特性最自然的表达,也就是这些语法特性被设计成恰如多少人期望的那样,尽量避免争议。事实上Go语言的语法特性上的争议非常少,这些也让Go语言的入门门槛变得非常低。
Go语言给我的第二个惊喜,是最对胃口的并行支持。
我对服务端开发的探索,始于Erlang语言,并且认为Erlang风格并发模型的精髓是轻量级进程模型。然而Erlang除了语言本身不容易被程序员接受外,其基于进程邮箱做消息传递的并发编程模型也小有瑕疵。我曾经在C++中实现了一个名为CERL的网络库,刚开始在C++中完全模仿Erlang风格的并发编程手法,然而在我拿CERL库做云存储服务的实践中,发现了该编程模型的问题所在并做了相应的调整,这就是后来的CERL 2.0版本。有意思的是,CERL 2.0与Go语言的并行编程思路不谋而合。某种程度上来说,这种默契也是我创办七牛时,Go语言语法特性甚至都还没有完全稳定,我们技术选型就坚决地采纳了Go语言的重要原因。
Go语言给我的第三个惊喜,是interface。
Go语言的interface,并非是你在Java和C#中看到的interface,尽管看起来有点像。Go语言的interface是非侵入式的接口,具体表现在实现一个接口不需要显式地进行声明。不过,让我意外的不是Go语言的非侵入式接口,非侵入式接口只是我接受Go语言的基础。在接口(或契约)的表达上,我一直认为Java和C#这些主流的静态类型语言都走错了方向。C++的模板尽管机制复杂,但是走在了正确的方向上。C++0x(后来的C++11)呼声很高的concept提案被否,着实让不少人伤了心。但Go语言的interface远不是非侵入式接口那么简单,它是Go语言类型系统的纲,这表现在:
1.只要某个类型实现了接口要的方法,那么我们说该类型实现了此接口。该类型的对象可赋值给该接口。
2.作为1的推论,任何Go语言的内置对象都可以赋值给空接口interface{}。
3.支持接口查询。如果你曾经是Windows程序员,你会发现COM思想在Go语言中通过interface优雅呈现。并且Go语言吸收了其中最精华部分,而COM中对象生命周期管理的负担,却因为Go语言基于GC(垃圾回收机制)方式的内存管理而不复存在。
Go语言给我的第四个惊喜,是极度简化但完备的“面向对象编程(OOP)”方法。
Go语言废弃大量的OOP特性,如继承、构造/析构函数、虚函数、函数重载、默认参数等,简化的符号访问权限控制、将隐藏的this指针改为显式定义的receiver对象。Go语言让我看到了OOP编程核心价值原来如此简单——只是多数人都无法看透。
Go语言带给我的第五个惊喜,是它的错误处理规范。
Go语言引入了内置的error类型及defer关键字来编写异常安全代码,让人拍案叫绝。下面这个例子,我在多个场合都提过。
f, err := os.Open(file)
if err != nil {
... // error processing
return
}
deferf.Close()
... // process file data
Go语言带给我的第六个惊喜,是它功能的内聚。
一个最典型的案例是Go语言的组合功能。对于多数语言来说,组合只是形成复合类型的基本手段,这一点只要想想C语言的struct就清楚了。但Go语言引入了匿名组合的概念,它让其他语言原本需要引入继承这一新概念来完成事情,统一又到了组合这样的一个基础上。
在C++中,你需要这样定义一个派生类。
class Foo : public Base {
...
};
在Go语言中你只要
type Foo struct {
Base
...
}
更有甚者,Go语言的匿名组合允许组合一个指针。
type Foo struct {
*Base
...
}
这个功能可以实现C++中一个无比晦涩难懂的特性,叫“虚拟继承”。但同样的问题,换从组合角度来表达,直达问题的本质,清晰易懂。
Go语言带给我的第七个惊喜,是消除了堆与栈的边界。
在Go语言之前,程序员是清楚地知道哪些变量在栈上,哪些变量在堆上。堆与栈是基于现代计算机系统的基础工作模型上形成的概念,Go语言屏蔽了变量定义在堆还是栈上这样的物理结构,相当于封装了一个新的计算机工作模型。这一点看似与Go语言显式表达的设计哲学不太一致,但我个人认为这是一项了不起的工作,而且与Go语言的显式表达并不矛盾。Go语言强调的是对开发者的程序逻辑(语义)的显式表达,而非对计算机硬件结构的显示表达。对计算机硬件结构的高度抽象,将更有助于Go语言适应未来计算机硬件发展的变化。
Go语言带给我的第八个惊喜,是Go语言对C语言的支持。
可以这么说,Go语言是除了Objective-C、C++这两门以兼容C为基础目标的语言之外的所有语言中,对C语言支持最友善的一个。什么语言可以直接嵌入C代码?没有,除了Go语言。什么语言可以无缝调用C函数?没有,除了Go语言。对C语言的完美支持,是Go语言快速崛起的关键支撑。还有比C语言更让人觊觎的社区财富么?那是一个取之不尽的金矿。
总而言之,Go语言是一门非常具变革性的语言。尽管这四十多年来(从1970年C语言诞生开始算起)出现的语言非常之多,各有各的特色,让人眼花缭乱。但是我个人固执地认为,谈得上突破了C语言思想,将编程理念提高到一个新高度的,仅有Go语言而已。
Go语言很简单,但是具备极强的表现力。从目前的状态来说,Go语言主要关注服务器领域的开发,但这不会是Go语言的完整使命。
我们说Go语言适合服务端开发,仅仅是因为它的标准库支持方面,目前是向服务端开发倾斜:
— 网络库(包括socket、http、rpc等)
— 编码库(包括json、xml、gob等)
— 加密库(各种加密算法、摘要算法,极其全面)
— Web(包括template、html支持)
而作为桌面开发的常规组件:GDI和UI系统与事件处理,基本没有涉及。
尽管Go还很年轻,Go语言1.0版本在2012年3月底发布,到现在才1年多,然而Go语言已经得到了非常普遍的认同。在国外,有人甚至提出“Go语言将制霸云计算领域”。在国内,几乎所有你听到过名字的大公司(腾讯、阿里巴巴、京东、360、网易、新浪、金山、豆瓣等等),都有团队对Go做服务端开发进行了小范围的实践。这是不能不说是一个奇迹。
与之相反的是,因为年轻,Go语言的资料,尤其是中文资料极度匮乏。在这样的背景下,《Go Web编程》这样一本有非常强的实践背景的图书出版了,这绝对是雪中送炭。
《Go Web编程》围绕做一个Web服务相关的一个个问题域展开:表单处理、数据库、会话(Session)、安全、国际化和本地化、日志、部署与维护。最后,结合作者的实践,本书给出了一个参考的Web编程框架,以简化Web编程,提升开发效率。
无论是对那些只是听过Go语言而打算开始了解的朋友,还是对那些已经进行Go语言开发的朋友,本书都极具参考价值。
另外值得一提的是,除了《Go Web编程》一书外,谢孟军也发起了Go语言标准库文档的翻译工作,这是一项艰苦的工作,但可以预期将对Go语言的发展起到重要作用,读者如果有意对开源贡献自己的一份力量,欢迎你能够积极参与其中。
七牛云存储CEO 许式伟
2013年4月
推荐序二
很早就知道孟军兄在网上写一本关于Go Web编程的书,但是因为各种原因都没缘分仔细去看,最近因为工作原因,也开始接触并使用Go语言,才去看这本书,读完后,便觉得相见恨晚。
本书并不是Go语言的教程,只是在第一章和第二章介绍Go的运行开发环境以及基本语法,但是受益于Go语言自身的简洁性,却也把Go语言的方方面面介绍得非常清楚。
然后介绍Web编程方面的HTTP,Web Server,文本处理,Cookie,Session等知识,同时提到了Web编程中的各种安全问题,比如CSRF、XSS、Session劫持、SQL注入、密码安全等问题,并且给出了Go语言解决方案。
与后台数据库的交互是Web编程中非常重要的环节,本书不仅介绍了MySQL,SQLite,PostgreSQL等传统关系型数据库,同时对MongoDB,Redis这两位NoSQL阵营的明星产品也有涉及,但最值得一提的是,作者编写的开源Go语言ORM库。一提到Web编程,我们马上想到的是PHP、Python、Ruby等动态语言以及基于这些语言的各种框架,如PHP阵营的Zend Framework,Python阵营的Django,Ruby阵营的Ruby On Rails,诚然,动态语言的特性加速了我们的开发效率,但是框架带来的便利与高效才是至关重要的,这点我们从Spring,Hibernate等框架对Java社区的重要性就可以看出。其中ORM是框架中非常重要的一部分,它帮开发者隐藏了繁琐的SQL细节,非常轻松地完成数据库的增删改查。作者开源的Go语言的ORM库功能已经相对完整,算是我国Go语言社区里开源的精品之作了,能有效提高使用Go语言进行Web开发的效率,虽然也存在需要提高改进的地方,但合抱之木生于毫末,九层之台起于累土,千里之行始于足下,只要坚持不懈,持续改进,未尝没有像Spring一样成为全球知名框架的可能。
本书的最后,还介绍了如何进行国际化与本地化的Web开发,讲解了如何调试、部署和维护方面的实践,提出了设计可扩展Web框架的建议。
本书以Web编程为主线,讲解了开发、测试、设计和部署等方面需要的知识,涵盖了一个Web站开发生命周期的方方面面,不仅是希望用Go语言开发Web服务的读者会受益匪浅,而且用其他语言的读者对Web编程的概念也会有清晰的认识。
Go语言目标是成为集合解释型编程的轻松、动态类型语言的高效及静态类型语言的安全三大优点的编译型语言,同时它对网络编程与多核计算支持非常好。在国内外,都已经有大型的IT公司在内部试水使用Go语言开发各种服务,其中也有不少成功案例。在技术社区,也有很多人开始宣传Go,使用Go,关注Go,相信在不久的将来,会有更多的人来使用Go语言来开发他们的Web服务,因为Go语言确实非常优秀而且实用。
京东商城云平台资深工程师,高级经理 郭理靖
2013年4月
作者简介
谢孟军,网名ASTA谢,现就职于盛大云,高级研究员,技术经理,主要从事盛大云分发的系统研发工作,努力为盛大游戏、盛大文学、酷六等提供更好的CDN服务。热爱技术,尤其关注实现服务器端高性能、高可用等相关技术。开发了beego、beedb等各类基于Go语言的开源框架和库,致力于Go语言的推广和研究。
媒体评论
七牛云存储CEO 许式伟:为什么我可以如此坚定地相信,选择Go语言不会有错,并且相信Go语言会成为未来十年最流行的语言?除了Go语言的并发编程模型深得我心外,Go语言的各种语法特性显得那么深思熟虑、卓绝不凡,其对软件系统架构的领悟,让我深觉无法望其项背,处处带给我惊喜。
京东商城云平台资深工程师,高级经理 郭理靖:Go语言的目标是成为集合解释型编程的轻松、动态类型语言的高效及静态类型语言的安全三大优点的编译型语言,同时它对网络编程与多核计算支持非常好。
网友@waylau:作者是国内较早研究GO语言在网络应用的实践和推广者,该书讲述了GO语言在Web开发方面的应用,例子详实,文章充实。不管是新手还是老鸟,读之受益匪浅。
网友@xgdapg:作者长期的Web开发经验和大量的实用技巧,使得本书的实用性远非其他空讲语法及概念的书籍可比。无论作为Go语言入门教程还是作为工具书,都是读者极好的选择。
网友@JessonChan:认真读过该书,作者讲解深入浅出,并且用beego和beedb开发了几个自己的项目,非常好,适合新人。
网友@aaronyue:作者作为国内Go语言的践行先驱,出手确实不一般。本书无论是学习Go语言还是Web编程相关概念和工具,都是一本值得反复阅读的好书。
网友@Xuyuanp:作为谷粉同是也是个码农,当然不能放过Go语言,这本书让我受益匪浅,非常感谢!
相关媒体报道
http://www.oschina.net/news/37765/go-web-programming-interview
http://news.cnblogs.com/n/160042/
前言
缘起
自从一年半之前看到许式伟的博客,我认识了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月于上海
有疑问加站长微信联系(非本文作者)