Frage
Wie können wir den Zeigertyp und -wert von ändern? eine Variable, die von einer Schnittstelle mit definiert wird Reflexion?
Antwort
In Go wird alles als Wert übergeben, einschließlich Schnittstellen. Bei der Zuweisung eines Schnittstellenwerts wird eine Kopie erstellt, wodurch das Änderungspotenzial begrenzt wird.
Um den in einer Schnittstellenvariablen gespeicherten Wert zu ändern, muss deren Adresse verwendet werden. Indem wir über „reflect.ValueOf(&varName).Elem()“ auf die Adresse der Variablen zugreifen, können wir einen neuen Zeigerwert darin festlegen.
Beispiel
var a fmt.Stringer // Interface variable a = &Greeter{"John"} v := reflect.ValueOf(&a).Elem() // Access variable's address v.Set(reflect.ValueOf(&Greeter2{"Jack"})) // Set new pointer value fmt.Println(a.String()) // Hello2, My name is Jack (Greeter2.String() called)
Wichtige Punkte
Einschränkungen
Das obige ist der detaillierte Inhalt vonWie kann ich den Zeigertyp und den Wert einer Schnittstellenvariablen mithilfe von Reflection in Go ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!