1 回答
TA贡献1906条经验 获得超10个赞
对于初学者,如果IS为零值,则添加val到切片中,如果不是,则不添加。所以你应该检查而不是你有什么。除此之外,您的代码似乎工作正常:valuesval if !reflect.DeepEqual(...
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
Age int
Email string
}
func main() {
user, values := User{Name: "Bob", Age: 32}, []interface{}(nil)
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)
}
}
}
输出以下内容(Go Playground Link):
Name is non-zero, adding to update
Age is non-zero, adding to update
因此,正确地看到该Email字段未初始化(或更正确地,包含 的零值string)。
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报