给出以下示例(此处的完整代码为https://play.golang.org/p/TA_sr5DaxMu):
type Data struct {
A int
B int
C sql.NullInt64
D sql.NullFloat64
}
func main() {
for i := 0; i < values1.NumField(); i++ {
v1 := values1.Field(i).Interface()
v2 := values2.Field(i).Interface()
// name of the i-th Data struct field
fieldName := values1.Type().Field(i).Name
_ = fieldName
switch v1 := v1.(type) {
case int:
if v1 == 0 {
v1 = v2.(int)
// struct1.fieldName = v1
}
case sql.NullInt64:
if !v1.Valid {
v1 = v2.(sql.NullInt64)
// struct1.fieldName = v2.(sql.NullInt64)
}
case sql.NullFloat64:
if !v1.Valid {
v1 = v2.(sql.NullFloat64)
// struct1.fieldName = v2.(sql.NullFloat64)
}
}
}
}
我想从struct1
值中覆盖struct2
中的零值。
我正在尝试使用反射方法,但对此我不是专家,但是我希望有一些功能可以完成我在案例中发表的评论。
有没有一种方法可以通过其名称访问struct元素,并能够用另一个变量来修改值?
任何帮助/建议将不胜感激。
编辑:实际结构具有40多个字段,这就是我要按其索引遍历所有struct字段的原因。