常见问题解答

参考 Go 官方文档——常见问题解答学习。

起源

用法

设计

为什么 Go 没有断言

Go 不提供断言。他们无疑是方便的,但是我们已有的经验是开发人员依赖断言避免思考合适的错误处理和报告。合适的错误处理意味着服务在一个非严重的错误之后继续操作而不是崩溃。合适的错误处理意味着错误是直接的、扼要的,使开发人员免于解释大量的崩溃跟踪。当看到错误的开发人员不熟悉代码,错误的准确尤为重要。

我们明白这是一个争论点。Go 语言和库有很多不同于现代实践的地方,只是因为我们感觉有时候值得尝试一个不同的方法。

类型

编写代码

指针和分配

并发

函数和方法

控制流

包和测试

实现

我最喜欢的测试辅助函数在哪里

Go 的标准 testing 包使得易于编写单元测试,但是它缺少其他语言测试框架提供的一些特性,比如断言函数。此文档前面的部分解释了为什么 Go 没有断言,以及在测试中使用断言的相同论点。合适的错误处理意味着使得其他测试在一个测试失败时继续运行,以便调试错误的人员可以得到一个错误的完整信息。对于一个测试来说,比起报告 isPrime 对于 2 的答案是错误的并因此不再运行更多测试,报告 isPrime 对 2、3、5、7 (或 2、4、8、16) 给出错误的答案是更加有用的。触发测试错误的开发人员可能不熟悉失败的代码。在测试失败时,花费时间编写一个好的错误消息是值得的。

相关的一点是测试框架趋向于发展成为他们自己的微语言,包括条件、控制和打印机制,但是 Go 已经有所有这些功能了;为什么要创建他们?我们更愿意用 Go 编写测试;它是一门学习更少的语言,而且这个方法保持测试是直截了当易于理解的。

如果编写好的错误所需的额外代码数量看起来是重复的、巨大的,那么表驱动测试可能效果更好。表驱动是迭代遍历定义在一个数据结构(Go 对于数据结构字面量有极好的支持)的输入和输出列表。编写一个好的测试和错误信息的工作在测试拥挤很多时将会被分摊。标准的 Go 库有许多说明示例,比如 fmt 包的格式化测试

性能

从 C 的改变

相关