【发布时间】:2018-09-29 05:55:45
【问题描述】:
我一直在寻找并为此苦苦挣扎了一段时间。我发现了另一个 Stack Overflow 问题,它让我朝着正确的方向前进,但没有奏效:Quick way to detect empty values via reflection in Go。
我当前的代码如下所示:
structIterator := reflect.ValueOf(user)
for i := 0; i < structIterator.NumField(); i++ {
field := structIterator.Type().Field(i).Name
val := structIterator.Field(i).Interface()
// Check if the field is zero-valued, meaning it won't be updated
if reflect.DeepEqual(val, reflect.Zero(structIterator.Field(i).Type()).Interface()) {
fmt.Printf("%v is non-zero, adding to update\n", field)
values = append(values, val)
}
}
但是我有fmt.Printf,它打印出我拥有的val 和reflect.Zero,即使它们都相同,它仍然进入if 语句,并且每个字段都被读取为非-zero 即使显然不是这样。我究竟做错了什么?我不需要更新字段,如果它们不为零,只需将它们添加到切片 values。
【问题讨论】:
标签: go reflection