首页 存档 技术 查看内容

采用Go语言作为服务端编程语言的建议书

2018-3-30 13:00 |来自: 互联网 439 0

摘要: 一、当前的挑战 随着互联网时代的到来,软件(特别是网络游戏)版本更新产品更迭的速度也在加快,这对软件开发效率和质量提出了更高的要求。只有更快更好更多地拿出产品,软件公司才能在市场上取得一席之地。随着我 ...

一、当前的挑战

随着互联网时代的到来,软件(特别是网络游戏)版本更新产品更迭的速度也在加快,这对软件开发效率和质量提出了更高的要求。只有更快更好更多地拿出产品,软件公司才能在市场上取得一席之地。随着我们公司的战略从端游转向页游和手游,加快产品开发的需求也更加迫切。

目前我们公司的主要开发语言仍为C 。确实在端游领域,C 作为客户端的开发语言是不二之选;但是在服务器端,C 作为编程语言越来越力不从心,我相信在进入页游和手游市场之后,这个问题将会越发严重。C 作为服务端的编程语言,存在如下主要问题:

1.开发效率低

这个已多有讨论,相信有几年编程经验的C 程序员都会有体会。

2.常见BUG

C 编程中,内存越界、非法内存引用、内存泄漏、非法类型转换等都是常见的BUG,在每个新人每个项目的成长过程中基本都会重复遇到,严重降低了产品的质量和稳定性。

3.软件工程

C 对软件工程的支持不够好,例如很不方便的代码重用、复杂的库依赖、五花八门的代码风格、缺乏良好的单元测试设施、不同的编译器甚至不同版本之间的不兼容特性、冗长的编译时间、贫乏的文档化支持等。

4.功能贫乏的标准库

虽然C 的库很丰富,但是标准库的功能却很贫乏。既没有正则表达式、也没有加密压缩算法、没有序列化支持、没有WEB支持、没有邮件等支持。

5.没有国际化、多语言的支持

6.跨平台支持

虽然C 可以在多个操作系统上编译,但是各个厂商的编译器对C 标准的支持不尽相同;标准库的接口也不尽相同;甚至C 对操作系统的统一化处理也支持不好,例如不同平台上的文件路径的处理。

7.缺乏高并发和多核的支持

C 语言只支持物理线程,严重制约了系统的并发性,在多核时代如果不同提高软件的并发性,性能将受到很大的影响。虽然有一些第三方C 库号称支持轻量级协程,但是使用起来也有很大的限制。

8.标准不统一

虽然C 有指定标准,但各个编译器厂商对C 标准的支持程度并不完全,在一些实现细节上也有差异;C 32位升级到64位程序的支持也不够平滑,如果用C 写的程序需要从32位升级到64位,需要做比较多的修改,也会担心因此产生BUG

9.学习曲线陡峭

C 是一门非常复杂的语言,即使是三年编程经验的程序员也不敢说能掌握C 知识的多少。现在我们公司的C 程序员,能看模板代码的有多少?自己能写的又有多少?这导致程序员培训的成本,程序员成长的成本非常非常的高。而众多低水平程序员用容易出错的C 写出来代码质量又能有多高?

如上所述,因为C 存在的一些问题,已经(其实是早就)严重影响了软件的开发效率和软件的质量,甚至因为不能充分利用多核的特性也已经影响到了软件的性能。但是一直没有出现合适的替代品。java的出现的一个主要原因就是要解决C 遇到的问题,但是出于虚拟机执行效率低下以及其他原因,并没有被一些公司采用。但是,2009发明、2010年发布正式版本的Go语言来了,Go言是C 语言一个很好的替代方案。

二、Go语言简介

Go语言是Google开发的一种编译型,并发型,具有垃圾回收功能的系统编程语言,官方支持FreeBSDLinuxMac OS XWindows四大操作系统。[1]

三、为什么要选择Go语言作为服务端开发语言

1.出身名门,社区支持,前途有保障

Go语言出于Google公司,由众多业界顶尖技术人士主持设计和开发,技术实力自然有保证。Go语言的作者包括:

lKen Thompson(http://en.wikipedia.org/wiki/Ken_Thompson

设计了B语言和C语言,创建了UnixPlan 9操作系统,1983年图灵奖得主,Go的共同作者。

lRob Pike(http://en.wikipedia.org/wiki/Rob_Pike

Unix小组的成员,参与Plan 9Inferno操作系统,参与LimboGo语言的研发。《UNIX编程环境》作者之一。

lRobert Griesemer

曾协助制作JavaHotSpot编译器和Chrome浏览器的JavaScript引擎V8

lRuss Cox(http://swtch.com/~rsc/

参与Plan 9操作系统的开发,Google Code Search项目负责人。

lIan Lance Taylor

GCC社区的活跃人物。gold连接器和GCC过程间优化LTO的主要设计者,Zembu公司的创始人。

lBrad Fitzpatrick(http://en.wikipedia.org/wiki/Brad_Fitzpatrick

LiveJournal的创始人,著名开源项目memcached的作者。

另外,设计Go语言的动机是为了解决Google公司自身在服务器端开发中遇到的一些实际问题,而不是某些人出于兴趣而发明的玩具,所以不存在半途而废的危险,只会不断的发展和完善。

由于Go的优秀特性,加上是开源语言,也吸引了很多开源社区的人士参与开发。Go语言的社区非常活跃,甚至Go语言的主要开发人都经常在社区里参与讨论,并给一些初学者进行解答。作为功成名就的顶尖技术人士还能有这样的热情参与社区的讨论脚轮,只能说他们确实是非常非常的热爱他们自己创造的这门语言。

2.执行效率

Go是强类型的编译性语言,从这一点上说,Go的执行效率在理论上会比较好。根据benchmarksgame.alioth.debian.org的测试报告[2]显示:C 的效率大约是Go2~3倍,个别测试项目上则是7~13倍。Go语言主要开发者Rob Pike解释说这是因为Go一些标准库如正则表达式的优化还不够,Go语言编译器生成的代码本身已经足够媲美C/C [3][4]在即将发布的Go1.1中,性能会得到很大的提升。加以时日,Go语言还会进一步改进完善。

3.开发效率高
腾讯soso团队称,在将一个C 程序用Go改写后,代码行缩减为原先的50%[5]

4.语言标准统一

Go语言支持FreeBSDLinuxMac OS XWindows四大主流操作系统,用Go语言编写的代码如果没有用到操作系统特定的系统调用,完全可以不做修改在各个系统上编译运行,程序的行为表现完全一致而不会有差异导致BUGGo语言在设计时就考虑到了对32位和64位程序的兼容,基本上32位程序不需要做特别的修改就可以直接在64位上编译运行。

5.很方便的与C函数进行交互的接口

Go主要支持与gcc的交互,在Windows平台上需要安装MinGW,而且支持不是很好。

6.丰富的标准库

Go语言提供了丰富的标准库,可以很好地支付服务器端开发:

a)网络库(包括SocketHTTPRPC等)

b)编码库(包括JSONXMLGOB等)

c)加密库(各种加密算法、摘要算法)

d)Web(包括TemplateHTML支持)

许式伟(前金山技术总监,现七牛存储CEO)认为,在所有语言中Go语言的标准库是对服务器端开发支持最好最全面的[6]

7.国际化支持

Go语言直接在语言层面支持UTF-8

8.高并发、多核的支持

采用CSP并发模型,使用轻量级的goroutine。程序员可以创建大量(百万级别)的goroutine同步执行逻辑,简化编程。

9.良好的软件工程支持

a)采用包机制管理源代码以及非侵入式接口设计,对代码重用支持非常好

b)规范的错误处理

c)对单元测试、性能测试提供了良好的支持

d)良好的文档化支持。程序员只要按照约定写好注释,工具可以自动生成漂亮的说明文档

e)强制的代码风格,保证了所有程序员编写的代码在风格上都能保持一致,降低了程序员阅读他人代码的门槛。

f)编译速度极快,对每日构建、集成测试提供了很好的支持。

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部