Go 中的自定义错误处理

我仍然不相信我确切地知道如何获取自定义错误,我可以从我的函数返回并在它们之外处理这些错误。


这就是我目前正在做的事情:


func doSomething() int {

    x := 0

    // Do something with x.

    ...

    if somethingBadHappened {

        return -1

    }

    if somethingElseBadHappened {

        return -2

    }

    return x

}

这就是我想做的事情:


func doSomething() int, ? {

    ...

    if somethingBadHappened {

        return ?, err

    }

    if somethingElseBadHappened {

        return ?, err2

    }

    return x, nil

}

但我不确定如何以及用什么来替换这些问号。


翻阅古今
浏览 225回答 2
2回答

肥皂起泡泡

我会转func doSomething() int, ? {        ...        if somethingBadHappened {                return ?, err        }        if somethingElseBadHappened {                return ?, err2        }        return x, nil}进入func doSomething() (r int, err error) {        ...        if somethingBadHappened {                err  = err1 // Whatever satisfies the `error` interface                return        }        if somethingElseBadHappened {                err = err2 // dtto                return        }        return x, nil}IOW,在调用站点,如果 err != nil,则忽略、从不使用或依赖任何其他返回值是惯用的*,所以只要不关心r上面是否已分配了一些中间值。(*) 在第一个近似值中,即如果没有另外说明。例如,一个io.Reader显式声明它可以同时返回err == io.EOF有效数据:当 Read 在成功读取 n > 0 个字节后遇到错误或文件结束条件时,它返回读取的字节数。它可能会从同一个调用中返回(非零)错误或从后续调用中返回错误(和 n == 0)。这种一般情况的一个实例是,在输入流末尾返回非零字节数的 Reader 可能返回 err == EOF 或 err == nil。不管怎样,下一个 Read 应该返回 0,EOF。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go