下面是简短的测试:
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
。
来自反射。文件类型:
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