猿问

错误处理:返回内置错误与自定义类型

在 Go 的标准库中,内置用于错误处理。这篇文章使用了 std 库中的一些示例来演示错误处理在 Go 中的工作原理。error


package net


type Error interface {

    error

    Timeout() bool   // Is the error a timeout?

    Temporary() bool // Is the error temporary?

}


if nerr, ok := err.(net.Error); ok && nerr.Temporary() {

    time.Sleep(1e9)

    continue

}

if err != nil {

    log.Fatal(err)

}

我想知道坚持这一公约有什么好处。如果我们返回自定义类型怎么办?例如 类型。net.Error


PIPIONE
浏览 104回答 2
2回答

至尊宝的传说

我假设您正在谈论与.DoRequest() errorDoRequest() net.SomeSpecificError以下代码type CustomError struct {}func (CustomError) Error() string {    return "custom error"}func DoRequest() *CustomError {    return nil}func MarkTaskComplete() error {    return nil}func main() {    err := DoRequest()    if err != nil {        log.Fatal(err)    }    err = MarkTaskComplete()    if err != nil {        log.Fatal(err)    }}将无法编译,因为返回的错误无法分配给类型为 的 err 变量。MarkTaskComplete*SomeError第二个缺点是,您不能从 除 以外的任何其他错误返回。在某些情况下,您可能会从此类限制中受益,但在大多数情况下,这种方法更灵活。特别是当您的函数调用另一个函数时。DoRequestSomeErrorerror关于错误包装也值得一读

湖上湖

客户类型的好处,即净。错误是:    type Error interface {    error    Timeout() bool   // Is the error a timeout?    Temporary() bool // Is the error temporary?}上述内容的优点是更具描述性。我们将获取有关错误的更多信息,例如它是超时错误还是临时错误。除此之外,我们还了解了主要字段“error”中的主要数据,在上面的示例中,这是一个字符串。type error interface {    Error() string}
随时随地看视频慕课网APP

相关分类

Go
我要回答