Go编程语言的优缺点是什么?

不久之前,Google推出了这种新的编程语言,据说Python的速度非常快,而且非常简单。 我不会判断这个说法,而是问你:

你认为Go的优点和缺点是什么?
你能告诉我们关于你给这种编程语言的真正用处吗?

优点:

  • 去编译很快。
  • Go支持语言级别的并发。
  • 函数是Go中的第一类对象。
  • 去有垃圾收集。
  • string和地图被embedded语言中。

缺点:

  • 使用Go发行的软件包非常有用,但仍然会有一些库错过。 最值得注意的是一个UI工具包。
  • Go中不支持generics,尽pipe围绕它的讨论很多。

其他值得注意的地方可能是优点或缺点:

  • 去编译机器码。
  • Go是非常强types的。
  • Go不是传统意义上的面向对象。

小缺点:GO是一种编程语言,想象一下在Google上search“Go Object”或者“Go Maps”,并且使用gazillion不相关的页面。

编辑:虽然你可以使用“golang”,很容易find你所需要的。

我想这个答案已经过时了。 Golang在过去两年已经改变了。 很多bug修复和许多新的构build已经到来。 有些答案不再有效:

  1. Go仍然是一个可以改变的实验性语言。 (我想这可能是一个优势,取决于你如何看待它,对于大多数,这可能是一个缺点) – 我认为这已经改变了。
  2. 去窗户 – 不再有效。 它运行在Windows和Linux上。 (我不知道MAC)

更多优势 –

  1. 它提供了一个内置的Web服务器,这意味着你不需要Apache或任何其他的Web服务器。 这是Go的直接优势。
  2. Golang有例行公事 Go例程有能力有效地使用线程。 它将线程再次分成子线程,对于需要更高并发性的项目,这将是最好的select。
  3. 设置和build立一个应用程序是非常容易的。
  4. 去社区 – 他们有一个非常活跃的社区。 如果您遇到任何问题,请先在Google Golangsearch组中search,如果您没有findsearch或者在https://code.google.com/p/go/issues中发布,; 他们会在最多1天内回复。

我在http://blog.tideland.biz/category/golang上的博客中介绍了我目前的经验。; 据我现在可以看到Go是其他语言众所周知的function非常高效的组合。 它编译速度极快,只是尝试一下包装的时间 ,你会惊讶。 它是静态types的,但是你可以像使用dynamictypes的语言一样编写代码。 所以代码是小而强大的。 正如Will已经说过的,它提供了一种类似于Erlang / OTP的并发支持。 与goutoutines和渠道工作很简单,并与新的包netchan渠道也可以通过networking使用。

除了语言去libs也很重要。 这里已经有了 – 这个语言已经在11月份公布了,现在还在testing阶段 – 一大部分主要集中在networking上,比如http或websocket守护进程,模板引擎,encryption,编码等等。

Go是C的一个实用的进化,以获得新语言的一些优点而不会损失速度和精益。

它的部分inheritance源于Pascal,并带来了Delphi用户在其编译环境中一直非常喜欢的特性之一:令人难以置信的编译速度。

Go并没有像C ++那样创新C,而是用Pythonish的方式。 最显着的影响是鸭子打字(见Python词典)。 这意识到一些强types语言在解决问题时会产生许多问题,使得您需要复杂的模式来实现用作呼叫合同的简单接口可能会解决的问题。 到目前为止,这是我认为最大胆和最有希望的举措。 我看到的不仅仅是工程上的简化,而且是重新devise和发展代码库的简化。

最后,语言中的并行性对于那些首先被定位的应用程序来说是非常有前景的。 缺乏任何操作系统的UI绑定,我看到的第一个用途是创build服务器和应用程序框架。 从这个意义上说,我看到了很多与Java相似的目的,并确信Java编程人员会更快地编译和执行。

Go的另一个优点是它本身包含复数 。 科学计算非常重要。

Go是由asynchronous任务(goroutines)构build的,消息在它们之间传递。 这是非常可扩展的 – 这可以被映射到SMT / SMP和簇(可以想象一堆偷工作的线程),并且非常适合硅已经进入的横向扩展方向。

所以困扰我的事情就是在门外寻找状态

如果除了语言定义的基本并发容器之外没有全局variables,并且这些variables在代码中显式修饰,例如'global'是这样的variables的前缀,而'volatile'是C,那么这将是我认为程序性的Erlang世界需要。

想象一下这些并发容器是什么样子,以及如何通过redis / GFS2 / rdbms作为运行时选项而不是代码时间选项来支持它。

Stob说得更好: http : //www.theregister.co.uk/2009/12/10/verity_stob/page3.html (阅读整篇文章,非常好)