下面是一个简短的测试:
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呢。
发布于 2022-10-15 03:03:05
来自reflect.TypeOf文档:
TypeOf返回反射类型,该类型表示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 != nilhttps://stackoverflow.com/questions/74076081
复制相似问题