走进 Google 的 Go 语言

本文整理自Google首席工程师Rob Pike的演讲Slide,主要讲述的了Go的部分设计原理和初衷,也有提到Go语言在Google内外的应用现状。但本文的目的更多的是关于软件工程而不是编程语言的设计,更准确地说是如何设计编程语言来帮助软件工程。

 

序言:关于Go



Go语言是一个开源、并发、高效、简单、有趣(但对某些人来说可能很无聊)的编程语言,支 持垃圾回收(GC),具有很好的可伸缩性。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

Go最初是为了解决Google的问题而开发的,要知道Google面临着很多大问题。Google的中服务器最主要是C++编写的,除此之外还有 很多Java、Python代码。另外,Google还有数千名工程师、无数行代码、庞大的分布式构建系统以及数不清的机器(我们认为相对于一个中等规模 的集群)。Google的开发可能很慢,甚至笨拙,但它总是很有效。

所以毫无疑问Go对“大硬件”的支持非常好,也适合“大软件”的开发。CSDN之前也编译了一批Rob Pike的文章——Go语言之父谈Go:大道至简,在这里Rob描述了Go的创作起源和初衷。

为什么应该用Go?



Go是为了帮助人们阅读、调试和维护大型软件系统而生的,所以目标是

  • 不再缓慢
  • 不再笨拙
  • 提高效率
  • 保持(甚至提升)扩展性

但是在使用C++或者Java开发中却常常遇到各种问题:

  1. 构建缓慢
  2. 依赖性难以控制
  3. 每个编程语言都使用不同的语言子集
  4. 程序难以理解(文档等原因)
  5. 重复工作
  6. 更新成本高
  7. 版本交叉
  8. 自动化不方便(工具问题)
  9. 跨语言构建

而Go语言则是为了解决这些问题而设计的。

另外,C语言的依赖一直是个大问题,包括依赖叠加、编译时引入依赖的情况都很难处理,同时你也没办法查清哪些依赖是可以删除的,那些不可以。在C++中,这一点变得更加明显:

  • 每个类里都有#include文件
  • #include文件中有代码(而不仅仅是声明)
  • #ifndef的残留

所以一直无法在一台机器上构建大型Google二进制。(To build a large Google binary on a single computer is impractical.)

当然,工具确实很有帮助,于是做了如下改进:

  • 新的分布式构建系统
  • 不再需要Makefile(但仍然使用BUILD文件)
  • 多缓存
  • 多复杂度(大程序本身所具有的)

即使在Google的分布式构建系统的的帮助下,大型构建工程依然会花费不少时间(以其中一个二进制文件为例,在2007年花了45分钟,现在是27分钟)。生活质量还是太低。

走进Go语言



我们都希望拥有更高质量的生活,所以必须解决这些问题,所以就有了最初的想法:

  • 必须是可扩展的
  • 适合大型程序、大型团队以及拥有大量依赖的应用
  • 必须易于接近,例如接近C语言那样。
  • 现代化
  • 适合多核机器
  • 适合网络机器
  • 适合Web开发

Go语言的设计是以软件工程为目标,所以它有这些优点:

  • 清晰的依赖
  • 清晰的语法
  • 清晰的语义学
  • 简单的模型(垃圾回收和并发性)
  • 便捷的工具(go tool、gofmt、godoc、gofix等)

还有那些问题?



Go语言目前所面临的最大问题在于,还没有足够的经验来证明Go是否真的是一个成功的产 品,缺少大型应用实践。但是在Google内部,如golang.org、youtube.com、dl.google.com都已经开始使用Go语言开 发,除此之外还有一些其它小应用(有的是在GAE上)也选择使用Go;而在Google之外,BBC Worldwide、Canonical、Heroku、Nokia、SoundCloud也都在尝试Go。

总而言之,Go是由软件工程驱动的编程语言,但富有成效并且有趣,这样的设计非常高产。

Rob Pike演讲的Slide可以在这里看到。

时间: 2024-06-16 15:54:55

走进 Google 的 Go 语言的相关文章

google的GO语言环境安装

首先打开install Go页面:http://golang.org/doc/install.html 按着向导一步一步来安装. 本人环境:ubuntu9.10,acer Aspire4710 32位机器 下文"#"表示说明文字,其余为在终端中的命令或者文件操作 1.Environment variables(环境变量设置) (1)cd (2)mkdir go (3)mkdir bin (4)vi .bashrc (5)#在文件最后添加如下内容(根据机器的不同而使用不同的GOOS和GO

开发者必看 Google公布开源语言排行榜

虽说现在闭源是一大优势,有种种优点,比如安全系数高.但计算行业正朝着开源的方向不断向前探索.微软和Facebook为代表的大企业,都对开源做出了巨大贡献,Google也是开源的一个支持和倡导者.该公司的两大操作系统Chrome OS和Android都属于Linux的衍生发行版.今天,这家搜索巨头谷歌公司又宣布了一份<开源成绩单>(Open Source Report Card),介绍了这家公司开源项目的更多细节. 谷歌开源语言博客(引自cnBeta) Google开源项目办公室的Josh Si

红橙黄绿青蓝紫,“彩虹”走进 Google 移动搜索结果

摘要: 看来彩虹旗还在扩张自己在硅谷的版图(误),这一次是 Google 新版移动搜索结果页. 无论是桌面还是移动端,Google 都不断得对搜索结果页做视觉方面的微调.也许每一次的调整都不明 看来彩虹旗还在扩张自己在硅谷的版图(误),这一次是 Google 新版移动搜索结果页. 无论是桌面还是移动端,Google 都不断得对搜索结果页做视觉方面的微调.也许每一次的调整都不明确,但依靠广大用户基数收集的真实数据,在长期角度上看是会带来明显体验改进的. 近日,Google 正在对一种新的移动搜索展

“彩虹”走进 Google 移动搜索结果

摘要: 看来彩虹旗还在扩张自己在硅谷的版图(误),这一次是 Google 新版移动搜索结果页. 无论是桌面还是移动端,Google 都不断得对搜索结果页做视觉方面的微调.也许每一次的调整都不明 看来彩虹旗还在扩张自己在硅谷的版图(误),这一次是 Google 新版移动搜索结果页. 无论是桌面还是移动端,Google 都不断得对搜索结果页做视觉方面的微调.也许每一次的调整都不明确,但依靠广大用户基数收集的真实数据,在长期角度上看是会带来明显体验改进的. 近日,Google 正在对一种新的移动搜索展

Google toolbar 工具条介绍

中介交易 SEO诊断 淘宝客 云主机 技术大厅 互联网信息搜索是仅次于电子邮件的第二大网络应用,几乎所有上网的人都会用到搜索引擎来查找信息,因此对网民们来说,搜索引擎已成为大家网上冲浪不可或缺的得力助手. 在众多搜索引擎中,Google以它查询精确,功能强大,速度快而日益受到用户欢迎.以纯搜索应用而言,Google是目前使用频率最高的搜索引擎.如果你平时用过搜索引擎却没听说过Google的话,那只能说你太孤陋寡闻了! 图1 Google一贯的目标的是成为最好的搜索引擎,为满足用户需求可谓不遗余力

ASP利用Google实现在线翻译功能

google|在线 有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好Google提供了语言工具功能,下面介绍如何利用它来实现网页多种语言之间的转换. lan.htm <form><select name="lan"><option value="en|de">英语 翻译成 德语</option><option value="en|es">英语 翻译成 西班

SEO工具之Google关键字工具详解

使用关键字工具来生成新的关键字建议.在下面选择一个选项,然后输入一些描述性字词或短语,或输入您的网站网址. Google关键字工具 地址: https://adwords.google.com/select/KeywordToolExternal Google关键字工具主要有以下用途和特征: 网站初建,我们需要分析目标关键词. 为大中型网站做SEO时,查找长尾关键词. 当前目标关键词带来的搜索流量不理想,需要换个关键词. 需要做竞价广告,查询关键词单次点击价格. 完善的功能和说明,操作体验良好.

《Google软件测试之道》—第2章2.1节SET的工作

第2章 软件测试开发工程师 Google软件测试之道 C:\Documents and Settings\Administrator\桌面\页面提取自- 9780321803023_book.jpg 在理想情况下,一个完美的开发过程是怎样进行的呢?测试先行,在一行代码都没有真正编写之前,一个开发人员就会去思考如何测试他即将编写的代码.他会设计一些边界场景的测试用例,数据取值范围从极大到极小.导致循环语句超出限制范围的情况,另外还会考虑很多其他的极端情况.这些测试代码会作为产品代码的一部分,以自检

微软JavaScript团队向Dart语言泼冷水

Google推出Dart语言,目的是解决JavaScript的缺点.当Google在Dart上注入满腔热情之时,微软却泼了一盆冷水,称"改善JavaScript还有很长的路要走". 微软JavaScript团队近日发布了一篇博文,文中写道: Google在推广Dart时称JavaScript有根本性的缺陷,在这种情形下,需要在语法和运行时上和JavaScript"一刀两断".我们不同意这种观点. Dart的起步是比较艰难的,Google早期关于Dart的开发过程是封