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

Golang 中的错误 - 评估错误

Golang 中的错误 - 评估错误

Go
Cats萌萌 2021-10-04 16:10:50
我正在尝试理解以下示例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 而是其他一些错误类型的情况。


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

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