采访:关于 Go 语言和《Go Web编程》

标签: 综合新闻 | 发表时间:2013-02-17 21:26 | 作者:
出处:http://www.oschina.net/?from=rss

最近,在网上出现了一本名为《Go Web编程》的书籍,里面详细地讲述了使用Go语言进行Web编程的各个方面。很特别的是,这本书是在GitHub上以开源的方式撰写的。日前,InfoQ采访了这本书的作者谢孟军先生,请他来和大家谈谈Go语言以及他撰写的开源书籍。

InfoQ:请您先简单和大家介绍一下自己。

谢孟军:大家好,我叫谢孟军,可以叫我Asta,目前就职于盛大云,负责盛大云分发产品的研发。云分发就是我们平常所谓的CDN系统。

InfoQ:是什么原因促使您撰写《Go Web编程》这本书呢?

谢孟军:我以前主要从事PHP、Python等Web方面的开发,后来到了盛大云之后接触比较多C++等底层的东西,就想学习一下这些底层的技术。再后来看到许式伟的博客,了解到Go语言。Go出自B语言的作者和Unix创始人Ken Thomson之手,而且还有多位牛人在后面支撑,该语言设计的初衷就是系统级别的语言。这正好符合我学习的目标,所以我就开始了自学之路。自学过程中发现Go在网络编程这一块为开发者提供了很多便利,既有C等语言的性能和排错能力,又具备Python等语言的动态特性,还内置了对多核并发的支持。

在学习的过程中,我发现Go在网络编程方面的表现非常好,而我以前主要从事Web开发,所以就想写《Go Web编程》这样一本书,主要还是把以前在Web开发中的一些经验和Go语言结合起来,做一些总结,给后来者一些启示,希望对想学习Go语言的同学们一些帮助。

InfoQ:您撰写的这本书在GitHub上开源,为什么会采取这样的一种方式呢?

谢孟军:采用GitHub主要是我之前看到过一本书叫做《 PHP扩展开发及内核应用》,这本书就是在GitHub上面写的,我看到之后很震惊,居然还可以这样来写书,而markdown又是如此的简洁,GitHub对于 markdown的支持也非常好,所以当初就决定在GitHub上面来写这本书。

InfoQ:Go语言的哪些特点最吸引您?哪些特点让您觉得需要进一步改进?

谢孟军:Go语言吸引我的主要有如下几点:

  1. 它是系统级别的语言,静态编译,是C系列语言。
  2. 具有很多内置库,使用起来和Python很类似。
  3. 语法足够简单,入门学习成本很低,适合我这样从PHP和Python切换过来的人。
  4. 速度快,就拿简单的页面来说,我用PHP开发并发能够达到500很好了,但是用Go轻松就到上万,这是无法比拟的性能提升,而且用Go开发的效率和PHP差不多。
  5. 出自Google之手,而且有一帮牛人在维护,基于BSD开源,社区活跃。
  6. 开源项目给我很多自信,举几个开源系统: vitess(YouTube的数据库proxy系统)、 nsq(bitly的一个实时信息处理系统)、 skynet(轻量级的分布式服务框架)、七牛公司全部用Go开发、360开发的类iMessage应用,支持上千万用户,同时单台服务器长连80w,这些系统都是他们线上跑的,这给我更大的信心能够用Go来开发高性能,高稳定的应用。

主要的缺点:

  1. 有些库不成熟,例如图像处理。
  2. cgo在Window系统下面编译很麻烦,就拿SQLite的数据库驱动来说,在Window下面编译就会遇到很大的麻烦。
  3. runtime还不够成熟,GC还不是很好,不过听说Go 1.1版本会有比较大的性能提升。
  4. Go的开源项目还不够多。我觉得一个语言的发展不仅仅是语言本身出色,还要有大公司推动或者好的项目推动。

InfoQ:有人说Go是互联网时代的C语言。与之相比,Go语言有哪些优势,又有哪些需要改进的地方呢?

谢孟军:Go语言确实吸收了很多C语言的特性,Ken大叔毕竟是Unix的创始人,很多以前看C不习惯的地方,这一次Go里面都改进了,例如{}的换行,()的去掉,强制格式化、去掉结尾分号等。而为什么Go被称为互联网时代的C呢?我认为是Go在语言级别上支持了并发,通过简单的关键字go就可以充分利用多核,这对于硬件不断发展的时代,这么简单就可以充分利用硬件的多核,这是多么重要的一个特性啊!但是相比C而言,Go还缺少一些高质量的第三方包,例如OpenGL等,所以Go内部也支持用cgo直接调用C语言编写的代码。

InfoQ:有人认为Go语言会在以后追赶上Java。与之相比,Go语言有哪些优势,又有哪些需要改进的地方呢?

谢孟军:我的感觉,Go要赶超Java还不知道要等到什么年代。 首先,Java目前在企业应用中非常稳定,而且基于Java的应用很多,库也多,我想Java也会有很多基于JVM的类似语言出现,例如Scala,我想Go要超越Java可能性不大。但是Go相比Java来说优点也是很明显的:简单,足够简单。记得以前有一篇Go创作者Rob写过一篇文章《大道至简》,就是讲为什么创建Go语言的过程。我想这一批老程序员的经验是值得我们学习的,就让我们用Go语言把复杂的事情简单化,简单的事情简单做,Go也许就是这样一种语言。

InfoQ:您现在是否已经在项目中大量应用Go语言,主要在哪些方面呢?

谢孟军:我现在开发的项目基本都是用Go开发的,但是页面上我还是用JavaScript来渲染,我现在的开发模式是JavaScript渲染前端+RESTful API,中间用JSON数据进行交互。采用这种模式开发主要有几点原因:

  1. 我认为JavaScript渲染页面方面比Go的模板做的好很多,而且JavaScript现有的库非常多,很容易做出很多效果,我的理念就是不管白猫黑猫,会抓老鼠就是好猫,合适的语言用在合适的地方。
  2. Go开发API相当地快速,而且性能很高,是PHP、Python之类的不能比拟的。
  3. 设计成RESTful API的话,系统就比较容易扩展,扩展性比较好。

目前内部的短域名服务采用了Go+redis开发,视频直播调度器全部采用了Go开发,内部的系统监控和自动化运维系统采用了JavaScript+RESTful API的形式开发,还有其他一些边缘项目都是采用Go开发。

同时我还开发了两个开源的项目:

  1. beego:一个模仿Python的tornado系统开发的Go开发框架,现在开发的几个系统都是基于该框架开发。
  2. beedb: 一个Go语言的ORM库,可以像操作struct一样操作数据库数据。目前我们内部的API接口我就是采用了这个ORM开发的。

InfoQ:您认为Go语言在Web编程方面,哪些特点会让它更有优势?

谢孟军:前面也说了Go语言设计的时候是系统级别的语言,所以他本身就有性能上面的优势。其次Go在Web开发中内置的net/http包对于开发Web非常方便,用户可以很方便的就搭建一个Web应用。熟悉PHP的同学可能对于nginx+fastcgi配置都很熟悉,但是Go开发的应用就不需要nginx,因为它自己就可以监控网络,解析数据包,而不依赖任何东西,你编译完之后扔到服务器起来就好了,这省去了一些部署的部分。最后就是Go的并发支持,大家都听说过摩尔定律,硬件只会越来越快,CPU的核数也会越来越多,那么Go的这个特性就让我们这些程序员从以前的多线程处理中解放出来,让Go语言的runtime来帮我们做这个事情,那用使用Go来编写Web何乐而不为呢?

InfoQ:对于开始学习Go语言,并期待将其应用在项目中的读者们,您有哪些建议呢?

谢孟军:刚开始学习Go语言的朋友,我建议读一下官方的一些文章,都非常有帮助,如果你对英文敏感的话,那么就看看我写的那本书《Go Web编程》。

在你应用Go到你的项目之前,希望你能够对于Go的特性有一定了解。目前Go语言的特性基本已经确定,接下来的版本都是基于性能的提升,新特性估计不大会有。然后,建议大家多读读Go内置的包源代码,因为这些包都是Go语言开发的,对于我们编写Go代码又很大的帮助,看看这些牛人们是怎么编写代码的。有句话说得好:学习牛人,复制牛人,超越牛人,最后我们自己成为牛人。

最后还是希望国内的技术人都学习一下Go语言,不管它现在对你有没有用,但是我可以肯定的说将来肯定有用,对于你开发项目时有扩展思路的作用,我现在也在学习Node.js、Erlang,我学习他们是为了更好的开发Go的项目,借鉴其他语言的一些特性。

相关 [采访 go 语言] 推荐:

采访:关于 Go 语言和《Go Web编程》

- - 开源中国社区最新新闻
最近,在网上出现了一本名为《Go Web编程》的书籍,里面详细地讲述了使用Go语言进行Web编程的各个方面. 很特别的是,这本书是在GitHub上以开源的方式撰写的. 日前,InfoQ采访了这本书的作者谢孟军先生,请他来和大家谈谈Go语言以及他撰写的开源书籍. InfoQ:请您先简单和大家介绍一下自己.

Go 语言初步

- wei - 云风的 BLOG
所谓认真玩,就是拿 Go 写点程序,前后大约两千行吧. 据说 Go 的最佳开发平台是 Mac OS ,我没有. Windows 版还没全部搞定,但是也可以用了. 如果你用 google 搜索,很容易去到一个叫 go-windows 的开源项目上. 如果你用这个,很多库都没有,而且语法也是老的. 我在 Windows 下甚至不能正确链接自己写的多个 package.

《学习Go语言》0.4 中文版

- way - python.cn(jobs, news)
鱼哥(https://twitter.com/#!/smallfishxy)上个月勒令我要完成 0.4 版的翻译. 之前公司重组的时候,没顾上看英文版本的更新,结果这老外不声不响的做了如此之多的改动……. 于是只好人工 diff,一条一条的对比 commit 内容. 总算是跟进到了 0.4 这个 tag.

文章: Go语言开发工具LiteIDE

- - InfoQ cn
Go语言最初在2009年11月对外公布,在2011年3月16日发布第一个release,第一个正式版本Go1于2012年3月28日推出. 在Go语言的正式版本推出后,Eclipse、IntelliJ IDEA、vim、emacs、gedit、SublimeText2、Textmate、Textpad、SciTE、Notepad++等IDE和编辑器开始纷纷有了各自的Go语言插件.

go语言编写Web程序

- - 博客园_首页
创建一个数据类型,含有load和save函数. 基于http包创建web程序. 基于template包的html模板技术. 使用regexp包验证用户输入. web程序的基础技术(HTTP, HTML). 首先,要有一个Linux, OS X, or FreeBSD系统,可以运行go程序. 如果没有的话,可以安装一个虚拟机(如VirtualBox)或者 Virtual Private Server.

为什么放弃Go语言【转载】

- - 编程语言 - ITeye博客
转载地址: http://blog.csdn.net/liigo/article/details/23699459. 有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言. 开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽.

Dropbox 开源其 Go 语言库 —— godropbox

- - 开源中国社区最新新闻
Dropbox的成功大部分归功于Python,这个语言可以使我们快速迭代开发. 然而,为了支持日益增长的用户量,我们的基础设施日渐成熟,这时 我们开始寻找一种更为高效的方式来改变系统规模. 大约在一年前,我们作出决定,把对于性能要求很苛刻的后台部分从Python迁移到了Go语言,以提供更 好的并发支持和更快的运行速度.

为什么要使用 Go 语言,Go 语言的优势在哪里?

- - 知乎每日精选
可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了. 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高. 语言层面支持并发,这个就是Go最大的特色,天生的支持并发,我曾经说过一句话,天生的基因和整容是有区别的,大家一样美丽,但是你喜欢整容的还是天生基因的美丽呢.

GO 工具包安装方法 - Go语言中文网 - Golang中文社区

- -
go 安装依赖包一般会通过四种路径. 比如我们可以通过go get github.com/xxx来下载安装包. 下载好之后, 通过go install github.com/xxx来安装包. 安装包会下载到$GOPATH/src文件中. 安装后的执行文件在$GOPATH/bin文件. 当我们执行go get golang.org/x/tools/cmd/goimports会报错.