Übergabe verschachtelter Strukturen als Referenz zur Reflexion
Diese Frage untersucht die Herausforderung, verschachtelte Strukturen mithilfe von Reflexion zu durchlaufen und Standardwerte für Felder festzulegen. Das Hauptproblem besteht darin, dass die Übergabe verschachtelter Strukturen nach Wert verhindert, dass sich Feldaktualisierungen in der ursprünglichen Struktur widerspiegeln.
Um dieses Problem zu beheben, müssen wir Strukturen als Referenz mithilfe von Reflektion übergeben. Die Lösung umfasst die folgenden Schritte:
Greifen Sie auf den Zeigerwert der verschachtelten Struktur zu:
Rekursiv über Felder iterieren:
Hier ist eine funktionierende Implementierung:
<code class="go">import ( "fmt" "reflect" ) type Client struct { Id int Age int PrimaryContact Contact Name string } type Contact struct { Id int ClientId int IsPrimary bool Email string } func SetDefault(s interface{}) error { return setDefaultValue(reflect.ValueOf(s).Elem()) } func setDefaultValue(v reflect.Value) error { switch v.Kind() { case reflect.Int: v.SetInt(42) case reflect.String: v.SetString("Foo") case reflect.Bool: v.SetBool(true) case reflect.Struct: // Recursive call using the pointer value of the nested struct err := setDefaultValue(v.Addr()) if err != nil { return err } default: return errors.New("Unsupported kind: " + v.Kind().String()) } return nil } func main() { a := Client{} err := SetDefault(&a) if err != nil { fmt.Println("Error: ", err) } else { fmt.Printf("%+v\n", a) } }</code>
Dieser Code legt rekursiv Standardwerte für alle primitiven Felder und verschachtelten Strukturen fest, indem er sie mithilfe von Reflektion als Referenz übergibt. Die Beispielausgabe lautet:
{Id:42 Age:42 PrimaryContact:{Id:42 ClientId:42 IsPrimary:true Email:Foo} Name:Foo}
Mit dieser Technik können Sie mithilfe von Reflektion effektiv eine Schleife durch verschachtelte Strukturen durchführen und Standardwerte festlegen und gleichzeitig sicherstellen, dass Änderungen an die ursprüngliche Struktur zurückgegeben werden.
Das obige ist der detaillierte Inhalt vonWie lege ich Standardwerte für verschachtelte Strukturen mithilfe von Reflection by Reference fest?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!