2 回答
TA贡献1886条经验 获得超2个赞
如果要检查所有字段是否都具有零值,您可以简单地检查
var foo Example
if foo == (Example{}) {
// ...
}
go 用零值初始化所有结构字段(如果是字符串,则为空字符串)。请记住,如果结构具有不具有可比类型(即指针,切片或映射类型)的字段,则这可能无法按预期工作。""
您可以使用反射的方法。用于
迭代字段和比较值的值(如反射。DeepEqual()
确实如此)。但在大多数情况下,最好只是编写一个显式执行检查的函数。
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") }
- 2 回答
- 0 关注
- 81 浏览
添加回答
举报