在错误包的wrap file中,我看到了这种类型的断言:
if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) {
return true
}
这种类型的断言形式有什么作用,与这种形式有什么区别
type IsError interface{
Is(error) bool
}
if x, ok := err.(IsError); ok && x.Is(target) {
return true
}
几乎像是试图断言err
是具有单个方法Is(error) bool
的接口文字,但是我认为接口文字不存在
答案 0 :(得分:2)
它正在检查array:1 [
0 => 7
1 => 1
]
是否实现了功能err
。它等效于您使用命名接口描述的内容。它不是接口文字,而是匿名接口。