我正在尝试理解以下示例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 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
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 而是其他一些错误类型的情况。
- 1 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消