在errors包的包装文件中,我看到了以下类型的断言:
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
的接口文字,但我认为接口文字不存在
它正在检查err
是否实现了函数Is(error) bool
。它相当于您对命名接口的描述。它不是一个接口文字,它是一个匿名接口。