Golang:代码的含义(括号内的写入接口)

func Unwrap(err error) error {

    // what is the meaning of this code

    u, ok := err.(interface {

            Unwrap() error

    })

    if !ok {

            return nil

    }

    return u.Unwrap()

}

这是来自错误pkg的源代码,

我想知道它的用法是什么


err.(interface {})


蝴蝶不菲
浏览 141回答 2
2回答

ABOUTYOU

u, ok := err.(interface {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Unwrap() error&nbsp; &nbsp; })此代码确保 err 对象(它确实是一个接口)具有带有 签名的方法。例:Unwrap() errorpackage mainimport (&nbsp; &nbsp; "fmt")type myError struct{}func (e myError) Error() string {&nbsp; &nbsp; return "it is my error"}func main() {&nbsp; &nbsp; var e1 error&nbsp; &nbsp; e1 = &myError{}&nbsp; &nbsp; u, ok := e1.(interface {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Unwrap() error&nbsp; &nbsp; })&nbsp; &nbsp; fmt.Printf("e1: %v -> %v\n",u,ok)&nbsp; &nbsp; e2 := fmt.Errorf("E2: %w", e1)&nbsp; &nbsp; u, ok = e2.(interface {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Unwrap() error&nbsp; &nbsp; })&nbsp; &nbsp; fmt.Printf("e2: %v -> %v\n",u,ok)}这将打印e1: <nil> -> falsee2: E2: it is my error -> true

守着一只汪

错误类型为接口类型。错误变量表示可将自身描述为字符串的任何值。下面是接口的声明:type&nbsp;error&nbsp;interface&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Error()&nbsp;string &nbsp;&nbsp;&nbsp;&nbsp;}有关更多详细信息,请参阅 -&nbsp;https://blog.golang.org/error-handling-and-go
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go