程序员为什么不使用Go语言呢?

开发
Go是一个来源于C语言的编程语言,在保留了C语言的简约风格的同时也进行了很多改进。 今年的早些时候我们对比过了几种native编程语言,包括D语言、Go、Rust和Vala。这里我们将分析来自Google的Go语言,看看他到底哪里跟别的语言不一样。

Go语言比其他的很多语言都吸引我,虽然我不是Go语言的专家,但是我很乐意在这里介绍一下它的特性,下面的这些特性指引我转向了Go语言。 

快速简单的编译: 

Go语言编译的很快,事实上,他快的甚至可以作为脚本语言了。几个使他编译很快的原因有: 

他不使用头文件

当A依赖B,B又依赖C时,那么首先会编译C,然后是B和A;但是如果A依赖B,但是A并不直接依赖于C,而是存在依赖传递,这时会把所有B需要从C拿到的信息放在B的对象代码里。这样,当编译A的时候,就不需要再管C了。

在编译程序时,只需将类型信息沿着依赖关系树向上遍历即可,如果到达树的顶端,则只需编译紧邻的依赖,而不用管其它层级的依赖了。

通过多返回值的错误处理: 

现代的编程语言基本上有两种错误处理办法,例如在C语言里是使用返回值,而在Java等面向对象语言里使用异常处理返回值,因为返回值的状态码总是可能跟 需要返回的结果有冲突。Go语言允许多返回值,从某种程度上解决了这个问题。你可以为你的函数的执行结果状态定义返回值,任何调用的时候都可以来检查,很 方便。

简单的组合:

可以使用interface为对象指定一些类型的成员,还可以像Java一样给他们指定操作(行为)。例如在标准库的io包中定义了一个Writer,就 有一个带有字节数组作为参数(输入)一个integer值和错误码作为返回值(输出)的方法。而实现了io.Writer接口中的Write方法的类型才 是实际被执行的。这个设计能够非常优雅的分离代码,还简化了单元测试过程,例如,如果你想测试一个数据库对象的一个方法,在传统的语言中你必须创建一个数 据库对象,然后做很多协议初始化工作。在Go语言中,你可在接口下创建任何对象。

简单的并发:

在Go中并发变得非常的简单,在任何函数前方上go两个字母,这个函数就将以他自己的go-routine(一个非常轻量级的线程)来运行,Go- routines之间通过channels来通信。我们通常会有一些需要线程同步和互斥的需求,在Go中非常简单,Go只是启动并发任务,各个任务之间通 过channels来通信,从而协调同步和互斥。

优秀的错误提示:

我从没见过别的语言有Go语言这么高的错误诊断质量。例如如果你的程序思索了,Go的运行时可以通知你,而且,他甚至可以告诉你是哪个线程出了问题。当然编译错误也是很详细很有用的。

其他特性:

Go语言还有其他非常吸引人的特性:高阶函数、垃圾回收、哈希映射、可扩展的数组等等。

当然了,没有一件东西是非常完美的,Go语言的开发工具还非常缺乏,社区很小,但是这个语言的背后支持者是Google,这些问题都会一步一步的 解决。当其他语言,尤其是D语言、Rust、Vala旨在简化C++而且增加新的特性的时候,他们都觉得自己像是带着新特性的C++。而Go语言更多的是 在反思一个Native语言应该是怎么样的。即使你没有特别考虑要使用Go语言,我想,即便哪怕是尝试一下,你将会发现你已经很欣赏他的很多特性了。 

【编辑推荐】

责任编辑:彭凡 来源: cnbeta
相关推荐

2023-03-17 09:55:10

2024-01-02 10:38:22

Go语言数组

2013-10-29 10:24:31

程序员漫画

2015-09-24 09:04:36

程序员

2011-08-11 14:52:59

2011-09-18 09:42:08

程序员

2015-06-05 14:15:13

程序员难升职

2012-09-06 10:30:58

2014-08-15 11:07:09

程序员

2011-12-20 09:01:25

.NET

2016-03-15 08:51:12

程序员生活怪异

2023-03-06 08:01:25

structGo语言

2019-01-23 11:27:18

程序员技能开发者

2011-05-19 08:19:50

Lisp

2020-04-07 16:12:56

Go编程语言开发

2010-10-09 09:20:08

.NET

2019-11-08 13:57:53

程序员Excel软件

2013-09-26 09:34:56

女程序员

2012-08-07 09:34:31

程序员

2015-11-02 09:19:10

程序员JavaScript
点赞
收藏

51CTO技术栈公众号