当前位置:  开发笔记 > 编程语言 > 正文

如何使用reflect.DeepEqual()将指针的值与其类型的零值进行比较?

如何解决《如何使用reflect.DeepEqual()将指针的值与其类型的零值进行比较?》经验,为你挑选了0个好方法。

我需要一个通用函数来检查某项是否等于其零值。

通过这个问题,我能够找到一个适用于值类型的函数。我修改了它以支持指针:

func isZeroOfUnderlyingType(x interface{}) bool {

    rawType := reflect.TypeOf(x)

    //source is a pointer, convert to its value
    if rawType.Kind() == reflect.Ptr {
        rawType = rawType.Elem()
    }

    return reflect.DeepEqual(x, reflect.Zero(rawType).Interface())
}

不幸的是,当执行以下操作时,这对我不起作用:

type myStruct struct{}

isZeroOfUnderlyingType(myStruct{}) //Returns true (works)

isZeroOfUnderlyingType(&myStruct{}) //Returns false (doesn't) work

这是因为&myStruct{}是指针,并且无法取消引用interface{}函数内部的方式。如何将指针的值与其类型的零值进行比较?

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有