这是简短的测试: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
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消