Función reflect.MethodByName() en Golang con ejemplos

El lenguaje Go proporciona una implementación de soporte incorporada de la reflexión en tiempo de ejecución y permite que un programa manipule objetos con tipos arbitrarios con la ayuda del paquete de reflexión. La función reflect.MethodByName() en Golang se usa para obtener el valor de la función correspondiente al método de v con el nombre dado. Para acceder a esta función, es necesario importar el paquete reflect en el programa.

Sintaxis:

func (v Value) MethodByName(name string) Value

Parámetros: Esta función no acepta ningún parámetro.

Valor devuelto: esta función devuelve un valor de función correspondiente al método de v con el nombre dado.

Los siguientes ejemplos ilustran el uso del método anterior en Golang:

Ejemplo 1:

// Golang program to illustrate
// reflect.MethodByName() Function
     
package main
     
import (
    "fmt"
    "reflect"
)
   
// Main function
type T struct {}
  
func (t *T) GFG() {
    fmt.Println("GeeksForGeeks")
}
  
func main() {
    var t T
    reflect.ValueOf(&t).MethodByName("GFG").Call([]reflect.Value{})
}

Producción:

GeeksForGeeks

Ejemplo 2:

// Golang program to illustrate
// reflect.MethodByName() Function
     
package main
     
import (
    "fmt"
    "reflect"
)
   
// Main function
  
type YourT2 struct {}
func (y YourT2) MethodFoo(i int, oo string) {
    fmt.Println(i)
    fmt.Println(oo)
}
  
func Invoke(any interface{}, name string, args... interface{}) {
    inputs := make([]reflect.Value, len(args))
    for i, _ := range args {
        inputs[i] = reflect.ValueOf(args[i])
    }
    reflect.ValueOf(any).MethodByName(name).Call(inputs)
}
  
func main() {
     Invoke(YourT2{}, "MethodFoo", 10, "Geekforgeeks")
}

Producción:

10
Geekforgeeks

Publicación traducida automáticamente

Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *