Go 博客
Go:一年前的今天
2009 年 11 月 10 日,我们发布了 Go 项目:一门注重简洁和高效的开源编程语言。过去的一年里,Go 项目本身及其社区都取得了长足的发展。
我们最初的设想是构建一门用于系统编程的语言——类似于 C 或 C++ 编写的程序。但令人惊喜的是,Go 在通用编程领域也展现出了它的实用性。我们原本预期 C、C++ 和 Java 程序员会对此感兴趣,但出乎意料的是,Python 和 JavaScript 等动态类型语言的用户也表现出了极大的热情。Go 结合了原生编译、静态类型、内存管理和简洁的语法,似乎与广大编程社区产生了共鸣。
这种共鸣逐渐凝聚成了一个充满活力的 Go 开发者社区。我们的邮件列表已有超过 3800 名成员,每月有大约 1500 封帖子。该项目已有超过 130 名贡献者(提交过代码或文档的人),自发布以来近 2800 次提交中,有近三分之一是由核心团队之外的程序员贡献的。为了整理所有这些代码,我们的开发邮件列表共交换了近 14000 封邮件。
这些数字反映了项目代码库中显而易见的劳动成果。编译器得到了显著改进,代码生成更快、更有效率,修复了一百多个已报告的 bug,并支持了更广泛的操作系统和架构。由于一群热心的贡献者(其中一位是我们项目的第一位非 Google 提交者)的努力,Windows 移植工作已接近完成。ARM 移植也取得了巨大进展,最近达到了通过所有测试的里程碑。
Go 工具集得到了扩展和改进。Go 文档工具godoc现在支持其他源代码树的文档(您可以浏览和搜索自己的代码),并提供了一个“代码漫步”界面来展示教程材料(此外还有更多改进)。Goinstall是一款新的包管理工具,允许用户通过一个命令安装和更新外部包。Gofmt,Go 的代码格式化工具,现在可以在可能的情况下进行语法简化。Goplay 是一款基于 Web 的“边写边编译”工具,当您无法访问Go Playground时,它是尝试 Go 的便捷方式。
标准库的代码量增加了 42,000 多行,并新增了 20 个包。新增的包包括jpeg、jsonrpc、mime、netchan和smtp包,以及一系列新的加密包。总的来说,随着我们对 Go 惯用法的理解不断加深,标准库也在不断地被优化和修改。
调试体验也有所改善。gc 编译器 DWARF 输出的最新改进使得 GDB(GNU 调试器)能够用于 Go 二进制文件,我们也在积极努力让调试信息更完善。(详情请参阅最近的博客文章。)
现在,与 Go 以外的现有库进行链接比以往任何时候都更容易。最新发布的 SWIG2.0.1版本支持 Go,使得与 C 和 C++ 代码链接更加便捷,而我们的cgo工具也得到了许多修复和改进。
Gccgo,作为 GCC(GNU C 编译器)的 Go 前端,作为并行 Go 实现,已经跟上了 gc 编译器的步伐。它现在拥有一个工作的垃圾回收器,并已被接受为 GCC 的核心部分。我们现在正致力于将gofrontend作为一种与 GCC 完全解耦的 BSD 许可的 Go 编译器前端提供。
在 Go 项目本身之外,Go 也开始被用于构建实际的软件。我们的项目仪表板列出了 200 多个 Go 程序和库,在Google Code和GitHub上还有数百个。在我们的邮件列表和 IRC 频道上,您可以找到来自世界各地使用 Go 进行编程项目的程序员。(上个月的客座博客文章中有一个真实世界的例子。)在 Google 内部,有几个团队选择 Go 来构建生产软件,我们也收到其他公司正在用 Go 开发大型系统的报告。我们还与几位将 Go 用作教学语言的教育工作者进行了交流。
语言本身也在不断发展和成熟。在过去的一年里,我们收到了许多功能请求。但 Go 是一门小型语言,我们一直在努力确保任何新功能都能在简洁性和实用性之间取得最佳平衡。自发布以来,我们做出了一些语言方面的更改,其中许多是根据社区的反馈驱动的。
- 几乎所有情况下,分号现在都是可选的。规范
- 新的内置函数
copy
和append
使切片管理更高效、更直接。规范 - 创建子切片时,可以省略上界和下界。这意味着
s[:]
是s[0:len(s)]
的简写。规范 - 新的内置函数
recover
作为错误处理机制,是对panic
和defer
的补充。博客,规范 - 新的复数类型(
complex
、complex64
和complex128
)简化了某些数学运算。规范,规范 - 复合字面量语法允许省略冗余的类型信息(例如,在指定二维数组时)。release.2010-10-27,规范
- 现在规定了可变参数函数(
...T
)及其传播(v...
)的通用语法。规范,规范,release.2010-09-29
Go 肯定已经做好了生产使用的准备,但仍有改进空间。我们近期关注的重点是提高 Go 程序在高性能系统环境下的速度和效率。这意味着改进垃圾回收器、优化生成的代码以及改进核心库。我们还在探索对类型系统进行一些进一步的扩展,以简化泛型编程。一年内发生了很多事情,既令人兴奋又令人满意。我们希望即将到来的一年比过去一年更加硕果累累。
如果您一直想重新开始学习 Go,现在正是绝佳的时机!请查看 文档和 入门页面以获取更多信息,或者直接在 Go Playground中尽情探索。
下一篇文章:Go 切片:用法和内部机制
上一篇文章:调试 Go 代码(状态报告)
博客索引