为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的自定义错误处理

Go 中的自定义错误处理

Go
翻阅古今 2021-06-03 13:32:57
我仍然不相信我确切地知道如何获取自定义错误,我可以从我的函数返回并在它们之外处理这些错误。这就是我目前正在做的事情: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}但我不确定如何以及用什么来替换这些问号。
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

我会转


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。


查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信