Учитывая следующий пример (полный код доступен здесь 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
значений.
Я пыталсяподход с использованием рефлекса, и я не эксперт в этом, но я надеялся, что есть какая-то функция, которая может выполнить то, что я прокомментировал внутри случаев.
Есть ли способ получить доступ к элементам структуры по его имени,и сможете изменить значение другим?
Буду признателен за любую помощь / совет.
РЕДАКТИРОВАТЬ: реальная структура имеет более 40 полей, поэтому я повторяювсе поля структуры по их индексу.