Error are values
防止出现使用 string text 去判定两个 error 是否相等
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