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 封电子邮件。

这些数字反映了项目代码库中显而易见的劳动成果。编译器有了显著改进,代码生成更快、更高效,修复了一百多个已报告的 bug,并支持更广泛的操作系统和架构。Windows 移植工作在专注的贡献者群体(其中一位成为了我们项目中第一位非谷歌的提交者)的努力下接近完成。ARM 移植也取得了巨大进展,最近达到了通过所有测试的里程碑。

Go 工具集已得到扩展和改进。Go 文档工具 godoc 现在支持文档化其他源树(您可以浏览和搜索自己的代码),并提供 “code walk” 界面用于呈现教程材料(还有许多其他改进)。新的包管理工具 Goinstall 允许用户通过单个命令安装和更新外部包。Gofmt,Go 的美化工具,现在在可能的情况下进行语法简化。Goplay,一个基于网络的“边写边编译”工具,是在无法访问 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 使 slice 的管理更高效和直接。规范
  • 创建 sub-slice 时可以省略上下界。这意味着 s[:]s[0:len(s)] 的简写。规范
  • 新的内置函数 recover 补充了 panicdefer 作为错误处理机制。博客, 规范
  • 新的复数类型(complex, complex64complex128)简化了某些数学运算。规范, 规范
  • 复合字面量语法允许省略冗余的类型信息(例如,在指定二维数组时)。release.2010-10-27, 规范
  • 现在指定了可变函数参数 (...T) 及其传播 (v...) 的通用语法。规范, 规范, release.2010-09-29

Go 当然已准备好用于生产环境,但仍有改进的空间。我们近期工作的重点是在高性能系统的背景下使 Go 程序更快、更高效。这意味着改进垃圾回收器、优化生成的代码以及改进核心库。我们还在探索对类型系统做进一步的添加,以使泛型编程更容易。一年里发生了很多事情;既令人兴奋又令人满意。我们希望未来一年比过去一年更加硕果累累。

如果您一直想回归 Go,现在是时候了!请查看 文档 入门指南 页面获取更多信息,或者直接在 Go Playground 中尽情尝试吧。

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