Können Sie eine Strukturmethode in Go nur mithilfe ihres String-Namens durch Reflektion aufrufen?

Susan Sarandon
Freigeben: 2024-11-24 00:47:10
Original
471 Leute haben es durchsucht

Can You Invoke a Struct Method in Go Using Only Its String Name Through Reflection?

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")
}
Nach dem Login kopieren

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{})
Nach dem Login kopieren

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{})
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage