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."
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{}) }
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!