Go 博客

Go:一年前的今天

Andrew Gerrand
2010 年 11 月 10 日

在 2009 年 11 月 10 日,我们发布了 Go 项目:一种开源编程语言,专注于简洁性和效率。过去的一年见证了 Go 项目本身及其社区的许多发展。

我们着手构建一种用于系统编程的语言 - 通常用 C 或 C++ 编写的程序 - 让我们惊讶的是,Go 作为通用语言的实用性。我们曾预计来自 C、C++ 和 Java 程序员的兴趣,但来自 Python 和 JavaScript 等动态类型语言用户的兴趣热潮却出乎意料。Go 的原生编译、静态类型、内存管理和轻量级语法组合似乎引起了编程社区广泛人群的共鸣。

这些广泛人群发展成为一个由热情的 Go 编码人员组成的专门社区。我们的 邮件列表 有 3,800 多名成员,每月约有 1,500 个帖子。该项目拥有 130 多位贡献者(提交过代码或文档的人员),自发布以来的 2,800 次提交中,近三分之一是由核心团队以外的程序员贡献的。为了将所有这些代码整理好,我们在 开发邮件列表 上交换了近 14,000 封邮件。

这些数字反映了劳动成果,这在项目代码库中显而易见。编译器已经有了实质性的改进,包括更快的代码生成和更有效的代码生成,修复了 100 多个已报告的错误,并支持越来越多的操作系统和体系结构。Windows 移植即将完成,这得益于一群敬业的贡献者(其中一人成为我们项目中首位非 Google 贡献者)。ARM 移植也取得了巨大进展,最近通过了所有测试,取得了里程碑式的成果。

Go 工具集得到了扩展和改进。Go 文档工具 godoc 现在支持对其他源代码树进行文档化(您可以浏览和搜索自己的代码)并提供 “代码行走” 接口来展示教程材料(以及许多其他改进)。Goinstall 是一种新的包管理工具,允许用户使用单个命令安装和更新外部包。Gofmt 是 Go 格式化程序,现在可以尽可能进行句法简化。Goplay 是一种基于 Web 的“边输入边编译”工具,当您无法访问 Go Playground 时,它是一种方便的 Go 实验方法。

标准库增长了 42,000 多行代码,包括 20 个新 。新增内容包括 jpegjsonrpcmimenetchansmtp 包,以及大量新的 密码学 包。更一般地说,随着我们对 Go 风格的理解不断加深,标准库一直在不断完善和改进。

调试故事也变得更好了。gc 编译器最近对 DWARF 输出的改进使得 GNU 调试器 GDB 可用于 Go 二进制文件,我们正在积极努力使调试信息更完整。(有关详细信息,请参阅 最近的博客文章。)

现在比以往任何时候都更容易链接到用 Go 以外的语言编写的现有库。Go 支持已包含在最新的 SWIG 版本(2.0.1 版)中,这使得更容易链接到 C 和 C++ 代码,我们的 cgo 工具已经进行了许多修复和改进。

Gccgo 是 GNU C 编译器的 Go 前端,作为 Go 的并行实现,它与 gc 编译器保持同步。它现在拥有一个可工作的垃圾收集器,并且已被接受为 GCC 核心的一部分。我们现在正在努力使 gofrontend 作为 BSD 许可的 Go 编译器前端可用,完全与 GCC 脱钩。

Go 项目之外,Go 开始用于构建真正的软件。我们的 项目仪表板 上列出了 200 多个 Go 程序和库,在 Google CodeGitHub 上还有数百个。在我们的邮件列表和 IRC 频道上,您可以找到来自世界各地的编码人员,他们使用 Go 来进行他们的编程项目。(请参阅我们上个月的 客座博客文章,了解一个真实世界的示例。)Google 内部有几个团队选择使用 Go 来构建生产软件,我们也收到了其他公司使用 Go 开发大型系统的报告。我们还与几位使用 Go 作为教学语言的教育工作者保持联系。

语言本身也得到了发展和成熟。在过去的一年中,我们收到了许多功能请求。但 Go 是一种小型语言,我们一直在努力确保任何新功能都能在简洁性和实用性之间取得正确的平衡。自发布以来,我们对语言进行了许多更改,其中许多是受社区反馈驱动的。

  • 在几乎所有情况下,分号现在都是可选的。 规范
  • 新的内置函数 copyappend 使切片的管理更高效和简单。 规范
  • 在制作子切片时,可以省略上下界。这意味着 s[:]s[0:len(s)] 的简写。 规范
  • 新的内置函数 recover 作为错误处理机制对 panicdefer 进行了补充。 博客规范
  • 新的复数类型(complexcomplex64complex128)简化了某些数学运算。 规范规范
  • 复合字面量语法允许省略冗余类型信息(例如,在指定二维数组时)。 release.2010-10-27规范
  • 现在指定了可变函数参数 (...T) 及其传播 (v...) 的通用语法。 规范 规范release.2010-09-29

Go 绝对已准备好投入生产使用,但仍有改进空间。我们目前的首要任务是让 Go 程序在高性能系统中运行得更快、更高效。这意味着改进垃圾收集器、优化生成的代码以及改进核心库。我们还探索了对类型系统的一些进一步补充,以使泛型编程更容易。一年来发生了很多事情;这既令人兴奋又令人满意。我们希望今年将比去年更加硕果累累。

如果您一直想[回到] Go,现在是一个好时机!查看 文档 入门 页面以了解更多信息,或者直接在 Go Playground 中尽情体验。

下一篇文章:Go 切片:用法和内部机制
上一篇文章:调试 Go 代码(状态报告)
博客索引