为什么 reflect.TypeOf(new(Encoder)).Elem() !

这是简短的测试:


type Encoder interface {

    Encode()

}

func main() {

    encoderInterface1 := reflect.TypeOf(new(Encoder)).Elem()

    var en Encoder

    encoderInterface2 := reflect.TypeOf(en)

    fmt.Println(encoderInterface1 == encoderInterface2)

}

输出false。


为什么呢false?我期待它是true。


去反射


三国纷争
浏览 163回答 1
1回答

慕的地10843

来自reflect.TypeOf文档:TypeOf 返回表示 i 的动态类型的反射类型。如果 i 是 nil 接口值,则 TypeOf 返回 nil。所以:var&nbsp;en&nbsp;Encoder&nbsp;//&nbsp;nil&nbsp;interface&nbsp;value encoderInterface2&nbsp;:=&nbsp;reflect.TypeOf(en)&nbsp;//&nbsp;<-&nbsp;nil至于:encoderInterface1&nbsp;:=&nbsp;reflect.TypeOf(new(Encoder)).Elem()将其分为两部分:pi&nbsp;:=&nbsp;reflect.TypeOf(new(Encoder))&nbsp;//&nbsp;<-&nbsp;this&nbsp;is&nbsp;a&nbsp;pointer&nbsp;to&nbsp;an&nbsp;interface&nbsp;(so&nbsp;not&nbsp;nil) encoderInterface1&nbsp;:=&nbsp;pi.Elem()所以:encoderInterface1&nbsp;!=&nbsp;encoderInterface2因为:encoderInterface1&nbsp;!=&nbsp;nil
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go