Я создал структуру Casedetail1 в том смысле, что у меня есть другие детали набора структур. Мне нужно обновить KitStatus и KitOwner при передаче обновленного значения из основной функции. После обновления вложенной структуры я пытаюсь получить родительскую структуру (Casedetail1), чтобы увидеть обновленный вывод. При попытке запустить приведенный ниже код на детской площадке он выдает { []}
в качестве вывода. Я не получаю значения.
package main
import (
"fmt"
"reflect"
)
type CaseDetails1 struct {
ObjectType string `json:"docType"`
CaseID string `json:"caseID"`
CaseStatus string `json:"caseStatus"`
KitDetails []Kit_Details `json:"kit_Details"`
}
type Kit_Details struct {
KitID string `json:"kitID"`
KitStatus string `json:"kitStatus"`
KitTimestamp string `json:"kittimestamp"`
KitSerialID string `json:"kitSerialID"`
KitOwner string `json:"kitOwner"`
}
// Function to update existing field of a nested struct
func method(existingEntity interface{}, newEntity interface{}) {
entityType := reflect.TypeOf(existingEntity).Elem()
for i := 0; i < entityType.NumField(); i++ {
value := entityType.Field(i)
value1 := entityType.Field(i).Name
fmt.Println(value1)
tag := value.Tag
if tag.Get("readonly") == "true" {
continue
}
oldField := reflect.ValueOf(existingEntity).Elem().Field(i)
newField := reflect.ValueOf(newEntity).FieldByName(value.Name)
//fmt.Println(newField)
if value.Type.Kind() == reflect.Struct {
method(oldField.Addr().Interface(), newField.Interface())
} else {
if value1 == "KitStatus" || value1 == "KitTimestamp" {
fmt.Println(value1)
oldField.Set(newField)
}
}
}
}
func main() {
var a CaseDetails1
b := CaseDetails1{"casedetails", "456", "OPEN", []Kit_Details{Kit_Details{"789",
"IN_PROGRESS","2019-10-30","345","HOSPITAL"},},}
method(&a, b)
fmt.Println(a)
}