[转][转]云计算时代,我与Go语言难解的缘分

标签: | 发表时间:2013-12-24 04:20 | 作者:heiyeshuwu
出处:http://blog.csdn.net/heiyeshuwu


来源: http://www.ituring.com.cn/article/14092


文/许式伟

我在新浪微博、《Go语言编程》一书中下了一个论断:Go语言将超过C、Java,成为未来十年最流行的语言。

               enter image description here

我曾在2007年第2届ECUG大会上提到了我对未来软件产业趋势的判断:存储与计算将向服务端转移;PC单机转换为强悍的服务器+多元化的终端。这个趋势判断对我的职业生涯其实影响非常重大。

从业务角度讲,正因为这个判断,促使我选择成立金山实验室研究云存储技术;也促使我关注Erlang这门面向分布式编程的领域性语言;促使我举办了一届届的ECUG大会;促使我加入盛大创新院,发起祥云计划(盛大云前 身),做盛大网盘;促使我们成立了七牛,有了七牛云存储。

从技术角度来讲,它促使我放弃了近10年的桌面开发经验,转向服务端开发。正如我在《我为什么选择了Erlang》中建议的那样:

  要么不写程序,要么就写服务器端程序;
当然,你也可以去撰写移动终端设备上的代码,在PC平台上做开发的空间很小。

在金山实验室时,我选择了Java语言,并积极关注Erlang语言,对其进行小范围试用,以及大规模使用的可行性评估。我的结论是:

  Erlang风格的并行思想真的很棒;
Erlang语言优势与劣势同样明显,这门语言不适合规模化推广使用。

Erlang的困难之处在于它是FP语言。我们缺乏深入人心的FP编程理论。我们并不了解FP“数据结构”学。这是Erlang语言无法逾越的门槛,决定了它只能是小众化语言。

进入盛大创新院后,我选择了C++,原因是我个人更喜欢C++,而对Java的设计哲学非常不感兴趣。出于对Erlang风格的并行思想的喜爱,我创建了一个名为CERL的项目,取义Erlang Model for C++,表明我希望能够把Erlang那一套并行编程模型搬到 C++中来,降低分布式编程的负担。

接触Go语言后,我发现CERL 2.0的并发编程模型,其实就是一个雏形版的Go语言并发模型,两者从理念上来说完全一致。

七牛公司成立于2011年5月底,我们选择了Go语言作为七牛云存储服务端的主体语言。当时Go语言甚至语法都还没完全稳定下来。为什么我可以如此坚定地相信,选择Go语言不会有错,并且相信Go语言会成为未来十年最流行的语言?除了Go语言的并发编程模型深得我心外,Go语言的各种语法特性显得那么深思熟虑、卓绝不凡,其对软件系统架构的领悟,处处带给我惊喜。

Go语言给我的第一个意外惊喜,是接口。当然,我意外的不是Go的非侵入式接口。在接口(或契约)的表达上,我一直认为Java和C#这些主流的静态类型语言都走错了方向。C++的模板尽管机制复杂,但走在了正确的方向上。但Go语言的接口远不是非侵入式接口那么简单,它是Go语言类型系统的纲。除了支持反射等高级特性外,Go语言还支持接口查询。

Go语言给我的第二个意外惊喜,是极度简化但完备的“面向对象编程”方法。Go语言废弃大量的OOP特性,如继承、构造/析构函数、虚函数、函数重载、默认参数等;简化的符号访问权限控制、将隐藏的this指针改为显式定义的receiver对象。让我看到了OOP编程核心价值原来如此简单—只是多数人都无法看透。

Go语言带给我的第三个惊喜,是它的函数多反回值和错误处理规范。函数多返回值比较容易想到,只有这样函数的输入输出才能清晰呈现,语义表达上才会足够清晰。不过让我没想到的是,Go引入了内置的error类型以及defer关键字来编写异常安全代码,让人拍案叫绝。

Go语言带给我的第四个惊喜,是它功能的内聚。一个最典型的案例是Go语言的组合功能。对于多数语言来说,组合只是形成复合类型的基本手段。但Go语言引入了匿名组合的概念,让其他语言原本需要引入继承甚至虚拟继承这样晦涩概念来完成的事情,统一到了组合这样的一个基础上。

Go语言带给我的第五个惊喜,是消除了堆与栈的边界。在Go语言之前,程序员是清楚地知道哪些变量在栈上,哪些变量在堆上。堆与栈是基于现代计算机系统的基础工作模型上形成的概念,Go语言屏蔽了变量定义在堆还是栈上这样的物理结构,相当于封装了一个新的计算机工作模型。这一点看似与Go语言显式表达的设计哲学不太一致,但我认为这是一项了不起的工作,且与Go语言的显式表达并不矛盾。Go语言强调的是对开发者的程序逻辑(语义)的显式表达,而非对计算机硬件结构的显示表达。对计算机硬件结构的高度抽象,将更有助于Go语言适应计算机硬件发展的变化。

Go语言带给我的第六个惊喜,是Go语言对C语言的支持。可以这么说,Go语言是除了Objective-C、C++这两门以兼容C为基础目标的语言外的所有语言中,对C语言支持最友善的一个。什么语言可以直接嵌入C代码?没有,除了Go。什么语言可以无缝调用C函数?没有,除了Go。对C语言的完美支持,是Go快速崛起的关键支撑。还有比C语言更让人觊觎的社区财富吗?那是一个取之不尽的金矿。

在《Go语言编程》一书的前言中,我谈到Go语言的基础哲学来源于C语言,而不是像Java、C#那样,学的是C++。C语言的成功在于它足够简单,所以Go语言也要非常简单。Go语言的定位就是成为互联网时代的C语言。本质上来说,Go语言的特性都围绕着以下设计哲学:

  大道至简,显式表达。任何封装都是有漏洞的。最佳的表达方式就是最直白的表达方式,不试图去做任何包装。
最少特性原则。如果一个功能不对解决任何问题有显著价值,那么就不提供。

尽管是40年来出现的语言非常之多,但我认为,谈得上突破了C语言思想,将编程理念提高到一个新高度的,仅有Go语言而已。

Go语言是一门变革性的语言,要革的是C的命(顺便革Java的命)。Go语言很简单,但具备极强的表现力。从目前的状态来说,Go语言主要关注服务器领域的开发,但这不是Go语言的完整使命。

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

  网络库(包括 Socket、HTTP、RPC 等);
编码库(包括 JSON、XML、GOB等);
加密库(各种加密算法、摘要算法);
Web(包括 Template、HTML支持)。

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

总之,我认为,Go语言将引领未来10年IT产业的发展。在最初5年内,Go语言会在服务器端编程上大放异彩,而桌面端的开发则仍然处于探索和完善期,预计在后5年才趋于成熟,成为各种手持设备上的主流开发语言之一。

作者许式伟,七牛云存储CEO,曾任盛大创新院资深研究员、金山软件技术总监、WPS Office 2005首席架构师。开源爱好者,发布过包括WINX、TPL等十余个C++开源项目,拥有超过15年的C/C++开发经验。在接触Go语言后即可被其大道至简、少即是多的设计哲学所倾倒。七牛云存储是国内第一个吃螃蟹的团队,核心服务完全采用Go语言实现。

本文首发《程序员杂志》经其允许转载。  本文选自《程序员》杂志2012年10期


作者:heiyeshuwu 发表于2013-12-23 20:20:48 原文链接
阅读:35 评论:0 查看评论

相关 [云计算 时代 go] 推荐:

[转][转]云计算时代,我与Go语言难解的缘分

- - heiyeluren的blog(黑夜路人的开源世界)
来源: http://www.ituring.com.cn/article/14092. 我在新浪微博、《Go语言编程》一书中下了一个论断:Go语言将超过C、Java,成为未来十年最流行的语言. 我曾在2007年第2届ECUG大会上提到了我对未来软件产业趋势的判断:存储与计算将向服务端转移;PC单机转换为强悍的服务器+多元化的终端.

云计算时代:运维人员会踩到哪些坑?

- - IT技术博客大学习
标签:   云计算   运维.    近期在ChinaUnix论坛有一场讨论,标题是——云计算时代:运维人员会踩到哪些坑.    整个讨论过程非常活跃,大概有50个答复,运维派这就给大家整理了一些讨论的优质内容分享给大家.    在云计算领域,运维人员就是这样的存在,小到一条短信,大到一次网上交易,只要和IT相关的业务就需要这些运维人员,没有他们在背后的支持,生活是会出大乱子的.

Go和HTTPS

- - Tony Bai
近期在构思一个产品,考虑到安全性的原因,可能需要使用到 HTTPS协议以及双向数字证书校验. 之前只是粗浅接触过HTTP( 使用Golang开 发微信系列). 对HTTPS的了解则始于那次 自行搭建ngrok服务,在那个过程中照猫画虎地为服务端生成了一些私钥和证书,虽然结果是好 的:ngrok服务成功搭建起来了,但对HTTPS、数字证书等的基本原理并未求甚解.

Valve宣布CS: GO

- 小D - Solidot
此前媒体曾报告说Valv邀请CSS玩家和社区代表访问其总部,现在谜团已经解开:Valv宣布了团队射击游戏Counter-Strike: Global Offensive,它将在2012年初登陆Steam(PC和Mac)、PS3和Xbox360. CS: GO将是12年前发布的CS的真正扩展,而不是类似CS:Source的引擎更新,它提供了新的地图、角色、武器,经典CS地图(如de_dust),新的游戏模式,配对比赛和排名榜等.

Go 语言初步

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

Go 1.1 的性能提升

- - 博客 - 伯乐在线
伯乐在线注:今天上午在微博推荐了英文原文,感谢 @Codefor 的热心翻译. 如果其他朋友也有不错的原创或译文,可以尝试 推荐给我们. 这是Go1.1发布后性能提升分析系列的第一篇文章. Go官方文档( 这里和 这里)报告说,用Go1.1重新编译你的代码就可以获得30%-40%的性能提升.

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

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

理解云计算

- 车东 - oneoo's 私家花园
  现在互联网最热门的关键字“云计算”,大大小小的公司纷纷加入到这块领域. 简单来说,目前的“云计算”主要分为:SaaS、PaaS和IaaS三大类.   其中SaaS云计算,为软件即服务的概念. 把传统客户端软件部署在互联网上,用户只需要一个浏览器就可以使用到软件的模式. 其实早在2000年就已经有B/S结构的软件服务,与现在所说的SaaS云计算相近,但此前的B/S结构软件服务,数据库等服务端是需要用户自行部署的,而非由软件提供商进行统一部署.

10问云计算

- - 《商业价值》杂志
与数百位关注和实践云计算的CIO们共同解读云计算热点问题. 被视作IT界第三次革命的云计算,已经从炙手可热的概念逐渐走向了实际应用. 2011年8-11月, ITValue社区联合英特尔公司,与数百位关注和实践云计算的CIO们一起展开深入探讨,话题涉及云计算的商业价值、安全性、开放性、高效性、简单性等方面.

《学习Go语言》0.4 中文版

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