Go 与reflect.TypeOf一起使用的空结构

Go 与reflect.TypeOf一起使用的空结构,go,Go,&Duck{}和(*Duck)(nil)之间有什么区别? 有什么理由选择其中一个而不是另一个吗 例: &Duck{}指向一个“Zero”结构实例,但它肯定不是nil!你可以给它赋值。您不能对nil指针执行所有这些操作,不管它们的类型是否相同 如果您只是对检查类型感兴趣,我认为nil指针更有效,因为它不涉及对象的分配 所以问题就归结到你到底想做什么 fmt.Println(reflect.TypeOf(&Duck{}) == reflect.TypeOf((*Duck)(nil))

&Duck{}
(*Duck)(nil)
之间有什么区别? 有什么理由选择其中一个而不是另一个吗

例:


&Duck{}
指向一个“Zero”结构实例,但它肯定不是nil!你可以给它赋值。您不能对nil指针执行所有这些操作,不管它们的类型是否相同

如果您只是对检查类型感兴趣,我认为nil指针更有效,因为它不涉及对象的分配

所以问题就归结到你到底想做什么

    fmt.Println(reflect.TypeOf(&Duck{}) == reflect.TypeOf((*Duck)(nil)))//true
    fmt.Println(nil == (*Duck)(nil))//true
    fmt.Println(nil == &Duck{})//false