为了账号安全,请及时绑定邮箱和手机立即绑定

检查结构字段是否不为空

检查结构字段是否不为空

Go
芜湖不芜 2022-09-19 10:12:14
如何迭代结构中的字段并检查它们是否在没有显式的情况下不为空?我有一个示例结构type Example struct {     Foo, Bar string     }我可以明确地检查每个字段是否不是“”,但我不想这样做。有没有简单的方法来完成我需要的东西?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

如果要检查所有字段是否都具有零值,您可以简单地检查


var foo Example

if foo == (Example{}) {

  // ...

}

go 用零值初始化所有结构字段(如果是字符串,则为空字符串)。请记住,如果结构具有不具有可比类型(即指针,切片或映射类型)的字段,则这可能无法按预期工作。""


您可以使用反射的方法。用于迭代字段和比较值的值(如反射。DeepEqual() 确实如此)。但在大多数情况下,最好只是编写一个显式执行检查的函数。


查看完整回答
反对 回复 2022-09-19
?
湖上湖

TA贡献2003条经验 获得超2个赞

我建议你使用反射包,如建议的姆科普里瓦。编写一次,然后将其用于所需的所有结构。例如,我改编了在这里找到的划痕

func IsEmpty(object interface{}) (bool, error) {

//First check normal definitions of empty

if object == nil {

    return true, nil

} else if object == "" {

    return true, nil

} else if object == false {

    return true, nil

}

//Then see if it's a struct

if reflect.ValueOf(object).Kind() == reflect.Struct {

    // and create an empty copy of the struct object to compare against

    empty := reflect.New(reflect.TypeOf(object)).Elem().Interface()

    if reflect.DeepEqual(object, empty) {

        return true, nil

    } else {

        return false, nil

    }

}

return false, errors.New("Check not implementend for this struct")  }


查看完整回答
反对 回复 2022-09-19
  • 2 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信