Golang 中的错误 - 评估错误

我正在尝试理解以下示例


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 {


Cats萌萌
浏览 197回答 1
1回答

慕的地6264312

e.(*argError)是将值 e 转换为 *argError 类型的类型断言。这是 f2() 在错误时返回的类型 - 它是一个指向 argError 结构的指针,该结构实现了错误接口。此类型断言将多值评估为 (ae,ok),其中 ae 是 *argError 类型的值,如果成功,ok 是一个布尔值,让您知道它是否成功。go 中的 if 语句可以分为初始赋值部分,然后是分号,然后是要评估的布尔条件以确定分支。那么总而言之,if ae, ok := e.(*argError); ok {意思是:尝试将 e 强制转换为 *argError,如果成功(执行 if 块)。为什么要这样做?因为 argError 具有不在普通错误 (arg, prob) 中的字段,您可能想要使用这些字段。在执行此操作的实际代码中,您可能还需要在“else”分支中处理 e 不是 argError 而是其他一些错误类型的情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go