为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
三国纷争 2023-02-28 21:14:11
这是简短的测试: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。去反射
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

来自reflect.TypeOf文档:

TypeOf 返回表示 i 的动态类型的反射类型。如果 i 是 nil 接口值,则 TypeOf 返回 nil。

所以:

var en Encoder // nil interface value
encoderInterface2 := reflect.TypeOf(en) // <- nil

至于:

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

将其分为两部分:

pi := reflect.TypeOf(new(Encoder)) // <- this is a pointer to an interface (so not nil)
encoderInterface1 := pi.Elem()

所以:

encoderInterface1 != encoderInterface2

因为:

encoderInterface1 != nil


查看完整回答
反对 回复 2023-02-28
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信