Error are values

image-20230727231954898

防止出现使用 string text 去判定两个 error 是否相等

image-20230727231941298

image-20230727232125428

Go 的处理异常逻辑是不引入exception, 支持多参数返回,所以你很容易的在函数签名中带上实现了 error interface 的对象,交由调用者来判定。

  • 如果一个函数返回了(value, error),你不能对这个 value 做任何假没,必须先判定 error。唯一可以忽略 error 的是,如果你连 value 也不关心。

Go 中有 panic 的机制,如果你认为和其他语言的 exception一样,那你就错了。当我们抛出异常的时候,相当于你把exception 扔给了调用者来处理。

  • 比如,你在 C++ 中,把string 转为 int,如果转换失败,会抛出异常。或者在java 中转换 string 为 date 失败时,会抛出异常。
  • Go panic 意味着 fatal error(就是挂了)。不能假没调用者来解决 panic,意味着代码不能继续运行。

使用多个返回值和一个简单的约定,Go解决了让程序员知道什么时候出了问题,并为真正的异常情况保留了 panic。

对于真正意外的情况,那些表示不可恢复的程序错误,例如索引越界、不可恢复的环境问题、栈溢出,我们才使用panic。对于其他的错误情况,我们应该是期望使用error 来进行判定。

  • 简单
  • 考虑失败,而不是成功(plan for failure, not success) 没有隐藏的控制流
  • 完全交给你来控制 error
  • Error are values
最后修改:2023 年 08 月 31 日
如果觉得我的文章对你有用,请随意赞赏