【发布时间】:2010-12-23 16:22:28
【问题描述】:
Go 语言创造者write:
Go 不提供断言。 不可否认,它们很方便,但我们的经验是程序员将它们用作拐杖,以避免考虑正确的错误处理和报告。正确的错误处理意味着服务器在非致命错误后继续运行而不是崩溃。正确的错误报告意味着错误是直接的、切中要害的,从而使程序员免于解释大量的崩溃跟踪。当看到错误的程序员不熟悉代码时,准确的错误尤为重要。
您对此有何看法?
【问题讨论】:
-
切题:Go 是一种非同寻常的固执己见的语言。这不一定是坏事。但是,这确实意味着您应该对它的意见持保留态度。这也意味着,如果您不同意,您将在使用该语言时咬牙切齿。作为 Go 如何在现实中坚持其观点的证据,请考虑您需要借助反射的魔力来确定两个集合是否相等。
-
@allyourcode 如果你指的是
reflect.DeepEqual,你当然不需要需要它。这很方便,但以性能为代价(单元测试是一个很好的用例)。否则,您可以毫不费力地实施适合您的“集合”的任何相等性检查。 -
不,我说的不是这个。没有反射就没有 slice1 == slice2 这样的东西。所有其他语言都具有与此超级基本操作等效的功能。 Go 没有的唯一原因是偏见。
-
您可以在 Go 中使用
for循环来比较两个切片而无需反射(就像 C 一样)。拥有通用切片操作会非常好,尽管当涉及指针和结构时比较会变得复杂。
标签: c++ c error-handling go assert