Reflexion: Zugriff auf Strukturen per String
Stellen Sie sich ein Szenario vor, in dem Sie eine Struktur mit einer bestimmten Methode haben:
type MyStruct struct { } func (a *MyStruct) AAction() { fmt.Println("Hello a") }
Um die AAction-Methode mithilfe von Reflektion dynamisch aufzurufen, können Sie Folgendes tun (gültig Ansatz):
reflect.New(reflect.TypeOf(MyStruct{})).MethodByName("AAction").Call([]reflect.Value{})
Die Verwendung von MyStruct{} als Ausdruck ist jedoch nicht Ihr gewünschter Ansatz. Stattdessen möchten Sie den Strukturnamen als Zeichenfolge angeben. Auf diesen Ansatz kann derzeit nicht zugegriffen werden:
theStruct := "MyStruct" theAction := "AAction" reflect.New(reflect.TypeOf(theStruct)).MethodByName(theAction).Call([]reflect.Value{})
Leider ist dieser Versuch fehlerhaft, da „reflect.TypeOf(theStruct)“ zum Typ „String“ führt.
Basierend auf Ihren Recherchen sind Sie auf etwas Ähnliches gestoßen Frage zum Aufrufen einer Strukturmethode nach Namen mithilfe einer Zeichenfolge. Der vorgeschlagene Ansatz des String-Matchings ist jedoch keine praktikable Lösung.
Antwort:
Trotz Ihrer Bestrebungen ist es nicht möglich, ihn aufzurufen eine Strukturmethode, die nur eine Zeichenfolge verwendet, die den Strukturnamen darstellt. Dies ist wahr, da die Reflexion einen konkreten Wert des betreffenden Typs benötigt, um zu funktionieren. Ohne einen Wert gibt es keine Möglichkeit, mit der Struktur oder ihren Methoden zu interagieren.
Um die gewünschte Funktionalität zu erreichen, müssten Sie eine benutzerdefinierte Registrierung verwalten, die Strukturnamen den entsprechenden Typen zuordnet. Diese Registrierung würde es Ihnen ermöglichen, den Typ basierend auf dem Zeichenfolgennamen abzurufen und dann die Reflektion wie gewohnt zu verwenden. Dieser Ansatz erfordert jedoch zusätzlichen Aufwand und ist möglicherweise nicht in allen Szenarien geeignet.
Das obige ist der detaillierte Inhalt vonKönnen Sie eine Strukturmethode in Go nur mithilfe ihres String-Namens durch Reflektion aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!