Ändern von Zeigertyp und -wert unter Schnittstelle mit Reflexion
In Go stellen Schnittstellen Verträge dar, die bestimmte Methoden definieren, aber nicht den Typ angeben des zugrunde liegenden Objekts. Diese Flexibilität ermöglicht eine dynamische Bindung, kann aber auch Herausforderungen darstellen, wenn versucht wird, den Zeigertyp und -wert einer durch eine Schnittstelle definierten Variablen zu ändern.
Können Zeigertyp und -wert unter einer Schnittstelle geändert werden?
Das Ändern des Zeigerwerts unter einer Schnittstelle ist mithilfe von Reflektion möglich. Durch Setzen des Elements des Reflexionswerts auf das Element des neuen Zeigerwerts kann der Wert geändert werden. Eine Änderung des Zeigertyps ist jedoch nicht direkt möglich.
Verwenden von Reflection zum Ändern des Zeigerwerts
Um den Zeigerwert einer durch eine Schnittstelle definierten Variablen zu ändern, befolgen Sie diese Schritte Schritte:
Beispiel
Im folgenden Code wird der Wert von a mithilfe von Reflektion geändert, um auf ein Greeter2-Objekt zu verweisen, während gleichzeitig der Name in „Jack“ aktualisiert wird:
package main import ( "fmt" "reflect" ) type Greeter struct { Name string } func (g *Greeter) String() string { return "Hello, My name is " + g.Name } type Greeter2 struct { Name string } func (g *Greeter2) String() string { return "Hello2, My name is " + g.Name } func main() { var a fmt.Stringer a = &Greeter{"John"} fmt.Println(a.String()) // Output: Hello, My name is John v := reflect.ValueOf(&a).Elem() v.Set(reflect.ValueOf(&Greeter2{"Jack"}).Elem()) fmt.Println(a.String()) // Output: Hello2, My name is Jack }
Hinweis: Um den Zeigertyp einer Variablen zu ändern, muss diese per Adresse übergeben werden. Dies liegt daran, dass Go Werte per Kopie übergibt und nur Zeiger eine indirekte Änderung des Zeigerwerts ermöglichen.
Das obige ist der detaillierte Inhalt vonKönnen Sie den Zeigertyp und den Wert einer durch eine Schnittstelle definierten Variablen mithilfe von Reflection in Go ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!