基本信息
编辑推荐
Go语言性能好、语法简单、开发效率高!一起来探索Go 语言吧!
内容简介
计算机书籍
《Go Web编程》介绍如何用Go语言进行Web应用的开发,将Go语言的特性与Web开发实战组合到一起,帮读者成功地构建跨平台的应用程序,节省Go语言开发Web的宝贵时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解。
在《Go Web编程》中,读者可以更加方便地找到各种编程问题的解决方案,内容涵盖文本处理、表单处理、session管理、数据库交互、加/解密、国际化和标准化,以及程序的部署维护等运维方面的知识,最后还介绍了一个快速开发的框架帮助您迅速进入Go语言的Web开发。
《Go Web编程》特别适合以下几类读者阅读:
从事PHP/Python/Ruby/Node.js等Web开发的读者,通过本书可以了解编译型语言怎么写Web应用开发,系统底层怎么进行网络通信。
从事C/C++/Java等系统级别开发的读者,通过本书可以了解到Web开发的一些知识,例如,如何处理表单,如何进行用户认证以及Session/Cookie等各方面的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这一门语言,发现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月于上海
序言
很高兴听到谢孟军的《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.只要某个类型实现了接口要的方法,那么我们说该类型实现了此接口。该类型的对象可赋值给该接口。
媒体评论
京东商城云平台资深工程师,高级经理 郭理靖:Go语言的目标是成为集合解释型编程的轻松、动态类型语言的高效及静态类型语言的安全三大优点的编译型语言,同时它对网络编程与多核计算支持非常好。
@waylau:作者是国内较早研究GO语言在网络应用的实践和推广者,该书讲述了GO语言在Web开发方面的应用,例子详实,文章充实。不管是新手还是老鸟,读之受益匪浅。
@xgdapg:作者长期的Web开发经验和大量的实用技巧,使得本书的实用性远非其他空讲语法及概念的书籍可比。无论作为Go语言入门教程还是作为工具书,都是读者极好的选择。
@JessonChan:认真读过该书,作者讲解深入浅出,并且用beego和beedb开发了几个自己的项目,非常好,适合新人。
@aaronyue:作者作为国内Go语言的践行先驱,出手确实不一般。本书无论是学习Go语言还是Web编程相关概念和工具,都是一本值得反复阅读的好书。
@Xuyuanp:作为谷粉同是也是个码农,当然不能放过Go语言,这本书让我受益匪浅,非常感谢!