Go Web编程(Go语言性能好、语法简单、开发效率高!)

whitepanda 发布于2年前 阅读14015次
0 条评论

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

arrayslicemap 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

RangeClose 83

Select 84

超时 85

runtime goroutine 85

2.8  总结 85

3章  Web基础 87

3.1  Web工作方式 87

URLDNS解析 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

Conngoroutine 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 ByHaving 139

进一步的发展 139

5.6  NOSQL数据库操作 139

redis 140

MongoDB 141

5.7  总结 143

6章  Session和数据存储 144

6.1  SessionCookie 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 BasicHTTP Digest认证 318

oauthoauth2的认证 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 TrendsGolang关键字的搜索指数,中国排在全球首位(比美国多3倍),这是整个中国Go语言社区共同努力的结果。

远在2007年第2ECUG大会,我讲了《我为什么选择了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.0Go语言的并行编程思路不谋而合。某种程度上来说,这种默契也是我创办七牛时,Go语言语法特性甚至都还没有完全稳定,我们技术选型就坚决地采纳了Go语言的重要原因。

Go语言给我的第三个惊喜,是interface

Go语言的interface,并非是你在JavaC#中看到的interface,尽管看起来有点像。Go语言的interface是非侵入式的接口,具体表现在实现一个接口不需要显式地进行声明。不过,让我意外的不是Go语言的非侵入式接口,非侵入式接口只是我接受Go语言的基础。在接口(或契约)的表达上,我一直认为JavaC#这些主流的静态类型语言都走错了方向。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-CC++这两门以兼容C为基础目标的语言之外的所有语言中,对C语言支持最友善的一个。什么语言可以直接嵌入C代码?没有,除了Go语言。什么语言可以无缝调用C函数?没有,除了Go语言。对C语言的完美支持,是Go语言快速崛起的关键支撑。还有比C语言更让人觊觎的社区财富么?那是一个取之不尽的金矿。

总而言之,Go语言是一门非常具变革性的语言。尽管这四十多年来(从1970C语言诞生开始算起)出现的语言非常之多,各有各的特色,让人眼花缭乱。但是我个人固执地认为,谈得上突破了C语言思想,将编程理念提高到一个新高度的,仅有Go语言而已。

Go语言很简单,但是具备极强的表现力。从目前的状态来说,Go语言主要关注服务器领域的开发,但这不会是Go语言的完整使命。

我们说Go语言适合服务端开发,仅仅是因为它的标准库支持方面,目前是向服务端开发倾斜:

— 网络库(包括socket、http、rpc等)

— 编码库(包括json、xml、gob等)

— 加密库(各种加密算法、摘要算法,极其全面)

— Web(包括template、html支持)

而作为桌面开发的常规组件:GDIUI系统与事件处理,基本没有涉及。

尽管Go还很年轻,Go语言1.0版本在20123月底发布,到现在才1年多,然而Go语言已经得到了非常普遍的认同。在国外,有人甚至提出“Go语言将制霸云计算领域”。在国内,几乎所有你听到过名字的大公司(腾讯、阿里巴巴、京东、360、网易、新浪、金山、豆瓣等等),都有团队对Go做服务端开发进行了小范围的实践。这是不能不说是一个奇迹。

与之相反的是,因为年轻,Go语言的资料,尤其是中文资料极度匮乏。在这样的背景下,《Go Web编程》这样一本有非常强的实践背景的图书出版了,这绝对是雪中送炭。

Go Web编程》围绕做一个Web服务相关的一个个问题域展开:表单处理、数据库、会话(Session)、安全、国际化和本地化、日志、部署与维护。最后,结合作者的实践,本书给出了一个参考的Web编程框架,以简化Web编程,提升开发效率。

无论是对那些只是听过Go语言而打算开始了解的朋友,还是对那些已经进行Go语言开发的朋友,本书都极具参考价值。

另外值得一提的是,除了《Go Web编程》一书外,谢孟军也发起了Go语言标准库文档的翻译工作,这是一项艰苦的工作,但可以预期将对Go语言的发展起到重要作用,读者如果有意对开源贡献自己的一份力量,欢迎你能够积极参与其中。

七牛云存储CEO  许式伟

20134

推荐序二

很早就知道孟军兄在网上写一本关于Go Web编程的书,但是因为各种原因都没缘分仔细去看,最近因为工作原因,也开始接触并使用Go语言,才去看这本书,读完后,便觉得相见恨晚。

本书并不是Go语言的教程,只是在第一章和第二章介绍Go的运行开发环境以及基本语法,但是受益于Go语言自身的简洁性,却也把Go语言的方方面面介绍得非常清楚。

然后介绍Web编程方面的HTTPWeb Server,文本处理,CookieSession等知识,同时提到了Web编程中的各种安全问题,比如CSRFXSSSession劫持、SQL注入、密码安全等问题,并且给出了Go语言解决方案。

与后台数据库的交互是Web编程中非常重要的环节,本书不仅介绍了MySQLSQLitePostgreSQL等传统关系型数据库,同时对MongoDBRedis这两位NoSQL阵营的明星产品也有涉及,但最值得一提的是,作者编写的开源Go语言ORM库。一提到Web编程,我们马上想到的是PHPPythonRuby等动态语言以及基于这些语言的各种框架,如PHP阵营的Zend FrameworkPython阵营的DjangoRuby阵营的Ruby On Rails,诚然,动态语言的特性加速了我们的开发效率,但是框架带来的便利与高效才是至关重要的,这点我们从SpringHibernate等框架对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语言确实非常优秀而且实用。

京东商城云平台资深工程师,高级经理  郭理靖

20134

作者简介

谢孟军,网名ASTA谢,现就职于盛大云,高级研究员,技术经理,主要从事盛大云分发的系统研发工作,努力为盛大游戏、盛大文学、酷六等提供更好的CDN服务。热爱技术,尤其关注实现服务器端高性能、高可用等相关技术。开发了beegobeedb等各类基于Go语言的开源框架和库,致力于Go语言的推广和研究。

媒体评论

七牛云存储CEO 许式伟:为什么我可以如此坚定地相信,选择Go语言不会有错,并且相信Go语言会成为未来十年最流行的语言?除了Go语言的并发编程模型深得我心外,Go语言的各种语法特性显得那么深思熟虑、卓绝不凡,其对软件系统架构的领悟,让我深觉无法望其项背,处处带给我惊喜。

京东商城云平台资深工程师,高级经理 郭理靖:Go语言的目标是成为集合解释型编程的轻松、动态类型语言的高效及静态类型语言的安全三大优点的编译型语言,同时它对网络编程与多核计算支持非常好。

网友@waylau:作者是国内较早研究GO语言在网络应用的实践和推广者,该书讲述了GO语言在Web开发方面的应用,例子详实,文章充实。不管是新手还是老鸟,读之受益匪浅。

网友@xgdapg:作者长期的Web开发经验和大量的实用技巧,使得本书的实用性远非其他空讲语法及概念的书籍可比。无论作为Go语言入门教程还是作为工具书,都是读者极好的选择。

网友@JessonChan:认真读过该书,作者讲解深入浅出,并且用beegobeedb开发了几个自己的项目,非常好,适合新人。

网友@aaronyue:作者作为国内Go语言的践行先驱,出手确实不一般。本书无论是学习Go语言还是Web编程相关概念和工具,都是一本值得反复阅读的好书。

网友@Xuyuanp:作为谷粉同是也是个码农,当然不能放过Go语言,这本书让我受益匪浅,非常感谢!

相关媒体报道

http://www.oschina.net/news/37765/go-web-programming-interview

http://news.cnblogs.com/n/160042/

前言

缘起

自从一年半之前看到许式伟的博客,我认识了Go这一门语言,发现GoC系的,个人又偏爱C语言,所以就开始了Go语言的学习之路,用三天时间学习了Go语言的所有语法和基础知识。恰逢当时手上有一些小项目练手,在项目开发中进一步发现Go语言具有三大优点:第一,性能好,我的Mac能够跑2万左右的并发;第二,语法简单,对于以前有C语言基础的人来说非常容易上手,我仅用一天时间就熟悉了基本语法,Go语言是一个上手即用的语言;第三,开发效率高,目前有很多编辑器支持Go语言,对于开发效率有很大的提升,一般的小项目半天就能解决。通过一年多来对Go语言项目的实战累积,我越来越觉得Go是一门工程语言,而不是其他学院派。无论是开发、测试、部署、项目规模的扩展,或者是团队协作,Go语言考虑都非常周到;而且其语法恰当好处,不多不少,够用就是它的设计原则,所以Go语言非常适合项目的开发。

选择Go语言,还有一部分是缘于我的个人崇拜,Go语言的作者不乏鼎鼎大名的牛人:Robert GriesemerRob PikeKen 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的基本原理、表单处理、数据库操作、SessionCookie处理、文本处理、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 RuiqiBianJiangOling CatWenlei Wupolaris、雨痕等网友的热心指导,还有很多github中的贡献者,本书是在大家共同协作努力下才得以完成。

我还要感谢符隆美编辑对我的支持,当我才思枯竭、延期脱稿时,她经常鼓励我、开导我,使我在压力下完成此书并最终出版。

最后要感谢家庭对我的莫大支持,妻子刘玉娟帮我收集资料,帮忙完成了本书的大部分整理工作,儿子们倾听我的思路想法,没有他们,我也没有毅力完成写作,谢谢他们。

谢孟军  

20134月于上海

需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。