TLDR:某个库中有一个函数,它通过网络执行某些操作,但可能会因错误而失败。错误可能表示输入参数错误,凭据无效,网络故障......而且......我不知道还有什么。这就是问题所在。
如何正确处理网络故障,我怎么知道会发生什么错误。
长版: 这是处理Go代码
中的错误的一种非常常见的方法function f0() (v Value, err Error) {
v2, err := f3()
if err != nil {
return
}
v1, err := f2(v2)
if err != nil {
return
}
v, err = f1(v1)
return
}
Go代码中也很常见的是不记录返回的错误类型。 我们不要忘记Go中另一个常见的习语
err = errors.New("Boo! I failed") // returns trivial errorString
这导致f0()
的来电者可能会收到数十个错误的情况(如果我的示例中f3()
到f1()
也会进行一些调用),这代表了概念上不同的问题。
如何区分所有这些错误?
答案 0 :(得分:0)
实现此最小接口的任何内容都是错误的;
type error interface {
Error() string
}
简单的解决方案是;
type BadCredsError string
func (e BadCredsError) Error() string {
return string(e)
}
基本上,只需定义自己的类型,然后就可以使用类型开关或类型断言来确定特定的错误类型,就像你在更多的OO语言中看到的那样,如C#和Java。
顺便说一句,我的示例就像一段2秒的伪代码片段。 go博客在这里进行了更深入的讨论; http://blog.golang.org/error-handling-and-go