Heim > Backend-Entwicklung > Golang > Wie kann ich Go-Struct-Methoden mithilfe von Reflection namentlich aufrufen?

Wie kann ich Go-Struct-Methoden mithilfe von Reflection namentlich aufrufen?

Linda Hamilton
Freigeben: 2024-12-27 20:39:11
Original
794 Leute haben es durchsucht

How Can I Call Go Struct Methods by Name Using Reflection?

Go-Strukturen und ihre Methoden beim Namen nennen

Beim Umgang mit Reflexion in Go kann es vorkommen, dass man auf die Notwendigkeit stößt, eine Methode von a aufzurufen Struktur mit ihrem Namen. Mir fällt die Funktion MethodByName() im Reflect-Paket ein, deren Verwendung jedoch möglicherweise nicht sofort ersichtlich ist. Ziel dieses Artikels ist es, einen vereinfachten Ansatz zum Aufrufen von Strukturen und ihren Methoden nach Namen bereitzustellen.

MethodByName() und StructByName()

Die falsche Vorstellung, dass StructByName() erforderlich ist vor dem Aufruf von MethodByName() ist falsch. MethodByName() kann direkt verwendet werden, um die gewünschte Methode abzurufen.

Eine Strukturmethode nach Namen aufrufen

Hier ist ein Beispiel, das zeigt, wie eine Strukturmethode nach Namen aufgerufen wird:

type MyStruct struct {
    //some feilds here
}

func (p *MyStruct) MyMethod() {
    println("My statement.")
}

// Notice there is no StructByName() function call here
CallFunc("MyStruct", "MyMethod") // prints "My statement."
Nach dem Login kopieren

In diesem Beispiel wird die Methode MyMethod auf einer Instanz von *MyStruct aufgerufen, die zuvor vorhanden war definiert.

Reflexionsbasierter Ansatz

Hier ist ein reflexionsbasierter Ansatz zum Aufrufen von Strukturmethoden mit Namen:

package main

import "fmt"
import "reflect"

type T struct {
}

func (t *T) Foo() {
    fmt.Println("foo")
}

func main() {
    t := &T{}
    reflect.ValueOf(t).MethodByName("Foo").Call([]reflect.Value{})
}
Nach dem Login kopieren

Dieser Ansatz nutzt Reflektieren .ValueOf, um ein Value-Objekt zu erhalten, das die Instanz von struct darstellt. Mit MethodByName() wird dann die gewünschte Methode abgerufen, die anschließend mit Call() aufgerufen wird.

Das obige ist der detaillierte Inhalt vonWie kann ich Go-Struct-Methoden mithilfe von Reflection namentlich 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