Maison >développement back-end >Golang >Comment puis-je appeler les méthodes Go Struct par leur nom à l'aide de Reflection ?

Comment puis-je appeler les méthodes Go Struct par leur nom à l'aide de Reflection ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-27 20:39:11789parcourir

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

Appeler des structures Go et leurs méthodes par leur nom

Lorsqu'il s'agit de réflexion dans Go, on peut rencontrer le besoin d'appeler une méthode d'un struct par son nom. La fonction MethodByName() du package Reflect vient à l’esprit, mais son utilisation n’est peut-être pas immédiatement apparente. Cet article vise à fournir une approche simplifiée pour appeler les structures et leurs méthodes par leur nom.

MethodByName() et StructByName()

L'idée fausse selon laquelle StructByName() est obligatoire avant d'appeler MethodByName() est incorrect. MethodByName() peut être utilisé directement pour récupérer la méthode souhaitée.

Appel d'une méthode Struct par nom

Voici un exemple illustrant comment appeler une méthode struct par son nom :

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."

Dans cet exemple, la méthode MyMethod est appelée sur une instance de *MyStruct, qui était auparavant défini.

Approche basée sur la réflexion

Voici une approche basée sur la réflexion pour appeler les méthodes struct par leur nom :

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{})
}

Cette approche exploite la réflexion .ValueOf pour obtenir un objet Value, qui représente l'instance de struct. MethodByName() est ensuite utilisé pour récupérer la méthode souhaitée, qui est ensuite appelée à l'aide de Call().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn