Golang中的错误 - 评估错误

时间:2015-05-05 23:56:21

标签: go

我想了解以下示例

https://gobyexample.com/errors

除了这一部分,我理解其中的大部分内容:

_, e := f2(42)
if ae, ok := e.(*argError); ok {
    fmt.Println(ae.arg)
    fmt.Println(ae.prob)
}

我不确定这条线的作用:

if ae, ok := e.(*argError); ok {

1 个答案:

答案 0 :(得分:4)

e.(*argError)

是一个类型断言,它将值e转换为* argError类型。这是类型f2()返回错误 - 它是一个指向argError结构的指针,它实现了错误接口。此类型断言将多值计算为(ae,ok),其中ae是* argError类型值,如果成功,则ok是布尔值,让您知道它是否成功。

如果go中的语句可以分为初始赋值部分,然后是分号,则需要一个布尔条件来评估以确定分支。

然后,

if ae, ok := e.(*argError); ok {

表示:尝试将e转换为* argError,如果成功则执行(如果阻止则执行)。

为什么这样?因为argError具有不在普通错误(arg,prob)中的字段,并且您可能希望使用这些字段。在您执行此操作的实际代码中,您可能还需要在“else”分支中处理e不是argError但是其他一些错误类型的情况。