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 關注
- 128 瀏覽
添加回答
舉報