Reflection: Strukturmethoden dynamisch über String-Bezeichner aufrufen
In Go ermöglicht Reflection die Untersuchung und Manipulation von Typen und Werten zur Laufzeit. Mit Reflection ist es möglich, eine Strukturmethode mithilfe ihres String-Bezeichners dynamisch aufzurufen. Was aber, wenn wir die Methode mithilfe einer String-Darstellung des Strukturtyps aufrufen möchten, anstatt explizit eine Instanz zu erstellen?
Das bereitgestellte ursprüngliche Code-Snippet versucht dies zu tun, schlägt jedoch fehl, weil reflekt.TypeOf() erwartet einen Wert, keine Typzeichenfolge. Die akzeptierte Antwort schlägt vor, den Typnamen irgendwo im Code mit einer Zeichenfolge abzugleichen, wodurch die Zuordnung zwischen Typnamen und Strukturen effektiv fest codiert wird.
Leider bietet das Reflexionspaket von Go keinen integrierten Mechanismus für diesen Zweck. Um das zu erreichen, was wir wollen, müssen wir unsere eigene Typregistrierung erstellen. So könnte es gemacht werden:
package main import ( "fmt" "reflect" ) // Create a type registry to map type names to types var typeRegistry = make(map[string]reflect.Type) type MyStruct struct { } func (a *MyStruct) AAction() { fmt.Println("Hello a") } // Register the MyStruct type in the registry func init() { typeRegistry["MyStruct"] = reflect.TypeOf(MyStruct{}) } func main() { // Get the Type object for the struct from the registry structType := typeRegistry["MyStruct"] // Dynamically invoke the method using reflection reflect.New(structType).MethodByName("AAction").Call([]reflect.Value{}) }
Durch die Registrierung des Typs in der Registrierung können wir nun das Reflect.Type-Objekt mithilfe des Zeichenfolgennamens der Struktur dynamisch aus der Registrierung abrufen. Dadurch können wir die Strukturmethode dynamisch aufrufen, auch ohne explizit eine Instanz der Struktur zu erstellen.
Zusammenfassend lässt sich sagen, dass das Go-Reflection-Paket zwar den Aufruf von Strukturmethoden mithilfe von Typzeichenfolgen nicht direkt unterstützt, dies jedoch möglich ist Diese Funktionalität wird durch die Pflege unserer eigenen Typregistrierung erreicht, um Typnamen Typen zuzuordnen. Dieser Ansatz bietet Flexibilität und macht eine harte Codierung der Zuordnung in unserem Code überflüssig.
Das obige ist der detaillierte Inhalt vonKönnen Sie Strukturmethoden in Go mithilfe von Typzeichenfolgen dynamisch aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!