Go 博客

与 Go 团队的对话

2013 年 6 月 6 日

在 Google I/O 2013 大会上,Go 团队的几位成员主持了一场“炉边谈话”。Robert Griesemer、Rob Pike、David Symonds、Andrew Gerrand、Ian Lance Taylor、Sameer Ajmani、Brad Fitzpatrick 和 Nigel Tao 回答了来自观众和世界各地人们关于 Go 项目各个方面的问题。

我们去年在 I/O 大会上也举办了类似的活动:与 Go 团队见面

Google Moderator 上有许多问题,在短短 40 分钟的会议中我们无法一一回答。在这里,我们回答一些在现场会议中遗漏的问题。

gc 工具链的链接速度(和内存使用)是一个已知问题。 在 1.2 版本周期中有任何计划解决这个问题吗?

Rob: 是的。我们一直在思考如何改进工具、语言和库的性能。

我很高兴看到 Go 似乎正在迅速获得关注。 您能否谈谈您与 Google 内部和外部的其他开发者合作时遇到的反应? 是否还存在任何主要的症结?

Robert: 许多认真尝试 Go 的开发者都非常喜欢它。他们中的许多人报告代码库变得更小、更易读,从而更易维护:从 C++ 迁移过来时,代码量减少 50% 或更多似乎很普遍。从 Python 切换到 Go 的开发者都对性能提升感到非常满意。典型的抱怨是关于语言中一些小的不一致性(其中一些我们可能会在某个时候解决)。令我惊讶的是,几乎没有人抱怨缺乏泛型。

Go 何时能成为 Android 开发的一等语言?

Andrew: 这会很棒,但我们目前没有可以宣布的消息。

有关于 Go 下一个版本的路线图吗?

Andrew: 我们没有明确的功能路线图。贡献者倾向于研究他们感兴趣的东西。活跃的开发领域包括 gc 和 gccgo 编译器、垃圾回收器和运行时等等。我们预计大多数令人兴奋的新增功能将是对我们工具的改进。您可以在 golang-dev 邮件列表 上找到设计讨论和代码评审。

至于时间表,我们确实有 具体计划:我们预计将于 2013 年 12 月 1 日发布 Go 1.2。

你们希望 Go 在外部哪些地方得到应用? 您认为 Go 在 Google 之外获得采用的重大成功是什么? 您认为 Go 在哪些地方有可能产生重大影响?

Rob: Go 的部署取决于它的用户,而不是我们。我们很高兴看到它在任何有帮助的地方获得关注。它在设计时考虑到了服务器端软件,并在这方面显示出潜力,但它也在许多其他领域展现了优势,故事才刚刚开始。未来还有很多惊喜。

Ian: 初创公司更容易使用 Go,因为他们没有根深蒂固的代码库需要处理。 所以我看到了 Go 未来会取得的两大成功。 一个是由 Google 以外的现有大型软件公司大量使用 Go。 另一个是一家主要使用 Go 的初创公司成功 IPO 或被收购。 这些都是间接的:显然,编程语言的选择对于公司的成功来说是一个非常小的因素。但这将是另一种方式来表明 Go 可以成为一个成功的软件系统的一部分。

您是否(更)思考过动态加载 Go 包或对象的可能性,以及它如何在 Go 中实现? 我认为这可以实现一些非常有趣和富有表现力的结构,特别是与接口结合使用时。

Rob: 这是一个正在积极讨论的话题。我们认识到这个概念的强大之处,并希望能在不久的将来找到实现它的方法。在设计方法和使其具有可移植性方面存在严峻的挑战。

前一段时间,有人讨论过将一些优秀 database/sql 驱动程序收集到一个更集中的地方。 不过,有些人持强烈反对意见。 在接下来的一年里,database/sql 及其驱动程序的发展方向如何?

Brad: 虽然我们可以为数据库驱动程序创建一个官方的子仓库(“go.db”),但我们担心这会过度认可某些驱动程序。目前,我们仍然更希望看到不同驱动程序之间的健康竞争。SQLDrivers wiki 页面 列出了一些不错的驱动程序。

database/sql 包由于缺乏驱动程序,有一段时间没有得到太多关注。现在有了驱动程序,该包的使用量正在增加,并且正在报告(和修复)正确性和性能方面的错误。修复工作将继续进行,但没有计划对 database/sql 的接口进行重大更改。 可能会根据需要为性能或帮助某些驱动程序进行一些小的扩展。

版本控制的状态如何? 从 GitHub 导入代码是 Go 团队推荐的最佳实践吗? 当我们发布依赖于 GitHub 仓库的代码时,如果被依赖方的 API 发生变化,会发生什么?

Ian: 这在邮件列表中经常被讨论。我们在内部的做法是获取导入代码的快照,并定期更新该快照。这样,如果 API 发生变化,我们的代码库就不会意外中断。但我们知道,这种方法对于提供库的人来说效果不是很好。我们欢迎在这方面的良好建议。请记住,这是围绕语言的工具的一个方面,而不是语言本身;解决这个问题的地方在于工具,而不是语言。

Go 和图形用户界面怎么样?

Rob: 这是一个我非常关心的话题。Newsqueak 是一种非常早期的前身语言,专门用于编写图形程序(我们过去称之为应用)。情况变化很大,但我认为 Go 的并发模型在交互式图形领域有很多可提供的价值。

Andrew: 有很多现有图形库的绑定,还有一些 Go 特定的项目。其中一个更有前景的项目是 go.uik,但它仍处于早期阶段。我认为开发一个优秀的 Go 特定的 UI 工具包来编写原生应用具有很大潜力(考虑通过从通道接收来处理用户事件),但开发一个生产级包是一项重大任务。我毫不怀疑随着时间推移会有一个出现。

同时,Web 是最广泛可用的用户界面平台。Go 为构建 Web 应用提供了很好的支持,尽管 只 在后端。

在邮件列表中,Adam Langley 曾表示 TLS 代码尚未经过外部团队审查,因此不应在生产环境中使用。 有计划对代码进行审查吗? 一个良好且安全的并发 TLS 实现将非常不错。

Adam:加密技术 notoriously 容易以微妙和令人惊讶的方式出现问题,而我只是个凡人。我不能保证 Go 的 TLS 代码是完美无瑕的,也不想对此进行误导。

代码在几个地方已知存在侧信道问题:RSA 代码是盲化的但不是恒定时间,除了 P-224 之外的椭圆曲线不是恒定时间,并且 Lucky13 攻击可能奏效。我希望在 Go 1.2 时间范围内通过恒定时间的 P-256 实现和 AES-GCM 来解决后两个问题。

然而,没有人主动提出对 TLS 堆栈进行审查,我也没有调查我们是否可以让 Matasano 或类似机构来做。这取决于 Google 是否愿意资助它。

您对 GopherCon 2014 有什么看法? 团队中有人计划参加吗?

Andrew: 这非常令人兴奋。我相信我们中的一些人会去。

下一篇文章:Go 与 Google Cloud Platform
上一篇文章:高级 Go 并发模式
博客索引