首页 > 编程语言 > 【十问十答】对话Go语言开发团队
2014
12-02

【十问十答】对话Go语言开发团队

  Go是谷歌推出的一门编程语言。熟悉Go语言的开发者都知道其弥补了C语言的不足并且保持了C的极简主义。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程(使用Go语言的12个理由)。一些主流的项目包括DockerHeroku's Force.com以及Cloud Foundry's (Go)Router都是基于Go语言编写而来。有人说,Go为云而生,也正是由于其拥有并发性的操作系统以及完美的架构,使其备受开发者的青睐。

  本月10日在巴黎举行的dotGo会议最后一个环节,是对Go语言开发团队(包括memcached开发者Brad Fitzpatrick)的问答。本文译自Sourcegraph的同学的现场记录,让我们一起来聆听大神们怎么看Go语言吧。

  译文如下:

Go语言开发团队成员:Francesc Campoy Flores、Andrew Gerrand、Brad Fitzpatrick、Dave Cheney、Keith Rarick及Blake Mizerany

  Q1:在任何编程语言中都会出现反模式(译注:指应该避免的错误用法)尤其是新语言,人们还在学习该使用和复用哪些语言特性。你们在Go语言中看到了哪些反模式,正确的做法是什么?

  Dave Cheney:我觉得是包,现在的包实在是太多了。包的粒度应该是一个比较完整和具体的概念,比如HTTP包合适,而HTTP Client就不合适。

  Utility包没问题,但名字不应该只是叫“utils”。

  Q2:坊间有不少第三方的依赖管理工具,如:godep,gpm等。未来Go的核心会提供这种功能吗?

  Brad Fitzpatrick:我们不想来定义游戏规则,话语权应交给社区,让它们自由竞争,产生胜者。受欢迎的产品稳定几年之后,我们才会考虑纳入语言核心。另外,我们之所以不太操心依赖管理,是因为在Google内部我们不用这些工具。

  Andrew Gerrand:语言核心中没有版本管理能促使库的作者们提供好的、稳定的API。约定是包API改变时,只改变导入路径。

  Q3:Go语言在Unix环境下的服务器端编程表现不俗。接下来,人们会不会尝试使用Go来进行桌面和嵌入式应用的编写?

  Dave Cheney:我乐于看到Go能在小的ARM处理器上有所表现。我们需要让编译器能针对不同的ARM生成相应的代码,这还比较简单。另外,垃圾回收语言需要更多内存,但这也是可以解决的问题。

  Brad Fitzpatrick:已经有人用Go编写GUI库了。

  Q4:Go语言在对Android支持方面有什么新进展吗?

  Andrew Gerrand:当然有!Google纽约办公室的David Crawshaw正在做这方面工作。他有几个让Go在Android上运行的办法:1)通过NDK,游戏应用可以访问画布、触摸事件、声音等;2)使用Java与Go相结合的办法。

  Q5:你认为Go语言的垃圾回收器已经适合用于产品环境的长时间运行、低延迟处理了吗?

  Brad Fitzpatrick:没问题啊,只要你仔细处理垃圾。我们已尝试重构dl.google.com,产生更少的垃圾,延迟非常小。现在Google内部只剩一个客户的实时需求Go垃圾回收器还无法满足。

  Q6:类似dlopen的动态载入代码有什么新进展吗?

  Andrew Gerrand: 可以先看看Lance Taylor最近写的关于Go语言执行模式的文档:Go代码可以在哪些不同上下文中运行。这些模式的实现都在计划之中,但何时完成谁来完成,具体还没有时间表,文档可以说是第一步吧。

  Brad Fitzpatrick:我想在连接器用Go重写之前都没时间做。

  Q7:因为没有机制引用其他goroutine,实现supervision tree和销毁goroutine线程都需要手工操作。这些未来会解决吗,哪些是通过库来支持,哪些会通过修改语言?

  Dave Cheney:在今年的GopherCon 会议上,有一种强烈的感觉,设计即使崩溃也能安全恢复的健壮应用是程序员的天职。指望系统层面花费投入精力就能坐收百分百可靠性,是靠不住的。

  Andrew Gerrand: 我觉得你应该反过来想想,即使Go语言把这些都实现了又能怎么样呢?整个进程崩溃,清理处理器没法调用时,你还不是得自己处理?

  Q8:堆压缩在路线图上吗?还是要等到在2.0版本大改?

  Brad Fitzpatrick:这个在路线图上。(Brad自己在此次会议的演讲中说,Go 2.0还根本没影呢)

  Q9:Go语言在新特性开发上好像较保守,不愿意增加新特性,这是有意为之吗?

  Dave Cheney:是的,这正是Go的特色之一。

  Andrew Gerrand:Go的设计当初只需要三名成员达成共识就行。现在成员多多了,所谓众口难调,共识更难达成。(半开玩笑的口气)小痛点不值得改,而大痛点需要大改,又很难hold住。Go 1.x总体已经定型了,我不认为增加泛型能突然让大家都满意。

  Brad Fitzpatrick:记住,标准委员会永远不会删掉任何东西。

  Q10:大公司对选择新语言显得更为慎重,对于说服他们来使用Go语言有什么建议吗?

  Dave Cheney:Go语言进入某个公司,往往是因为能解决具体问题,而不是来自上层的命令。这是最好的推广语:“它能帮我解决问题。”

  Andrew Gerrand:我必须指出,现在使用Go语言的大公司很多,包括苹果、Comcast、Facebook等等。更长列表参见这里

  英文出自:dotGo

编程技巧