Heim >Backend-Entwicklung >Golang >Wie übergebe ich verschachtelte Strukturen als Referenz in Reflection mithilfe von Value.Addr()?
Verschachtelte Strukturen und Referenzübergabe in der Reflexion
In Go geht es darum, verschachtelte Strukturen zu verstehen und zu erfahren, wie man sie in der Reflexion als Referenz übergeben kann entscheidend. Stellen Sie sich ein Szenario vor, in dem Sie über die verschachtelten Strukturen „Client“ und „Kontakt“ verfügen:
<code class="go">type Client struct { Id int Age int PrimaryContact Contact Name string } type Contact struct { Id int ClientId int IsPrimary bool Email string }</code>
Wenn Sie das Feld „PrimaryContact“ der Struktur „Client“ überprüfen, kann es zu einer „Reflect.Value.Set using unadressable value“-Panik kommen. Dies liegt daran, dass PrimaryContact als Wert und nicht als Referenz übergeben wird. Um dieses Problem zu lösen, müssen wir PrimaryContact als Referenz mithilfe von Reflektion übergeben.
Lösung mit Value.Addr()
Code:
<code class="go">package main 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 main() { client := Client{} v := reflect.ValueOf(&client) primaryContact := v.FieldByName("PrimaryContact").Addr() primaryContact.FieldByName("Id").SetInt(123) primaryContact.FieldByName("ClientId").SetInt(456) primaryContact.FieldByName("IsPrimary").SetBool(true) primaryContact.FieldByName("Email").SetString("example@example.com") fmt.Printf("%+v\n", client) }</code>
Ausgabe:
{Id:0 Age:0 PrimaryContact:{Id:123 ClientId:456 IsPrimary:true Email:example@example.com} Name:}
Wichtige Punkte:
Das obige ist der detaillierte Inhalt vonWie übergebe ich verschachtelte Strukturen als Referenz in Reflection mithilfe von Value.Addr()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!