3 回答
TA贡献1946条经验 获得超3个赞
正如 Peter Noyes 指出的那样,您只需要确保您没有比较不可比较的类型。幸运的是,这个reflect包非常简单:
func IsZero(v interface{}) (bool, error) {
t := reflect.TypeOf(v)
if !t.Comparable() {
return false, fmt.Errorf("type is not comparable: %v", t)
}
return v == reflect.Zero(t).Interface(), nil
}
请参阅此处的示例使用。
TA贡献1841条经验 获得超3个赞
以下两个都给了我合理的结果(可能是因为它们是相同的?)
reflect.ValueOf(v) == reflect.Zero(reflect.TypeOf(v)))
reflect.DeepEqual(reflect.ValueOf(v), reflect.Zero(reflect.TypeOf(v)))
例如,各种整数 0 风格和未初始化的structs 是“零”
可悲的是,空字符串和数组不是。并nil给出一个例外。
如果你愿意,你可以对这些进行特殊处理。
TA贡献1890条经验 获得超9个赞
Go 1.13Value.IsZero在reflect包中引入了方法。这是您可以使用它检查零值的方法:
if reflect.ValueOf(v).IsZero() {
// v is zero, do something
}
除了基本类型,它还适用于 Chan、Func、Array、Interface、Map、Ptr、Slice、UnsafePointer 和 Struct。
- 3 回答
- 0 关注
- 288 浏览
添加回答
举报