这种类型的断言形式的目的是什么

时间:2020-07-25 06:29:06

标签: go

在错误包的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的接口文字,但是我认为接口文字不存在

1 个答案:

答案 0 :(得分:2)

它正在检查array:1 [ 0 => 7 1 => 1 ] 是否实现了功能err。它等效于您使用命名接口描述的内容。它不是接口文字,而是匿名接口。