如何解决通过interface {}传递的对象是否没有初始化的字段

混合:

我在解决作为接口传递给函数的对象是否没有初始化字段(如定义为someObject{}空的对象)上没有初始化字段时遇到问题,因为所有字段的值均为0或nil

如果我传递不同的对象,问题会变得更加复杂,因为每个对象都有不同的类型字段值,所以在这一刻,我找不到通用的方法。

func main(){
    oo := objectOne{}
    ot := objectTwo{}
    oth := objectThree{"blah" , "balbal" , "blaal"}
    resolveIsNotIntialized(oo)
    resolveIsNotIntialized(ot)
    resolveIsNotIntialized(oth)
}

func resolveIsNotIntialized(v interface{}) bool{
    // and below, how resolve that oo and ot is empty
    if (v.SomeMethodWhichCanResolveThatAllFiledIsNotIntialized){
        return true
    }
    return false
}

我想避免使用switch如下的用法声明,避免使用每个对象的附加功能,如果可能的话。

func unsmartMethod(v interface{}) bool{
    switch v.(type){
    case objectOne:
        if v == (objectOne{}) {
          return true
        }
        // and next object, and next....
    }
    return false
}
罗布·纳皮尔(Rob Napier):

正如弗兰克指出的那样,这可能是个坏主意。每个值始终在Go中初始化。您的实际问题是类型是否等于其零值。通常,零值的设计应使其有效。更好的方法通常是按照以下方式创建接口:

type ZeroChecker interface {
    IsZero() bool
}

然后将其附加到要检查的任何类型。(或者可能更好:创建一个IsValid()测试而不是向后做逻辑。)

就是说,可以通过将其与零进行比较来进行反射检查。

func resolveIsNotIntialized(v interface{}) bool {
    t := reflect.TypeOf(v)
    z := reflect.Zero(t).Interface()
    return reflect.DeepEqual(v, z)
}

(您也许可以摆脱return v == z这里;我还没有考虑所有可能的情况。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决“LateInitializationError:字段‘userMap’尚未初始化。”

如何初始化继承对象的字段

如何解决:从不兼容的指针类型初始化

如何解决变量初始化C ++的警告

非法的char初始化程序-如何解决?

如何解决Singleton EJB初始化失败的问题

如何解决未初始化的常量搜索::错误

如何检查给定类是否具有字段并且已初始化?

如何解决“DNS 区域通过 PowerShell 没有足够的标签”错误

是否有任何解决方案可以在 unity 的更新函数中初始化变量?

如何解决“条件中的变量声明必须具有初始化程序”

如何确保在没有构造函数的情况下正确初始化对象?

如何在没有初始化程序的情况下使用 TopLevel 对象?

没有构造函数的情况下,对象初始化如何发生?

如何解决“初始化程序没有为此绑定元素提供任何值,并且绑定元素没有默认值。” 在TypeScript中?

我如何传递一个初始化的对象

CLR如何知道静态字段是否已经初始化?

如何解决此PHP错误“仅变量应通过引用传递”?

如何解决通过“ schedulerService”字段表示的不满意依赖性?

如何解决输入字段无法通过多个更改更新Firebase的问题

如何解决通过python客户端插入的大查询中的重复字段错误?

如何解决字段X没有默认值?

如何解决“类型接口没有字段或方法”错误?

Java如何解决Swift旨在解决的类初始化问题?

我该如何解决打字稿错误“ x”没有初始化程序并且在构造函数中未明确分配?

当我在 SwiftUI 中使用 Text 时,如何解决“调用初始化程序时没有完全匹配”错误?

如何解决AttributeError:'list'对象没有属性'astype'?

如何解决“列表”对象没有属性“应用”

如何解决元组对象没有属性“拆分错误”