Función reflect.Indirect() 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.Indirect() en Golang se usa para obtener el valor al que apunta v, es decir, si v es un puntero nulo, Indirect devuelve un valor cero. Si v no es un puntero, Indirect devuelve v. Para acceder a esta función, es necesario importar el paquete reflect en el programa.

Sintaxis:

func Indirect(v Value) Value

Parámetros: Esta función toma los siguientes parámetros:

  • v: Este parámetro es el valor a pasar.

Valor devuelto: esta función devuelve el valor al que apunta v.

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

Ejemplo 1:

// Golang program to illustrate
// reflect.Indirect() Function
  
package main
  
import (
    "fmt"
    "reflect"
)
  
// Main function
func main() {
     val1:= []int  {1, 2, 3, 4}             
  
     var val2 reflect.Value = reflect.ValueOf(&val1)
     fmt.Println("&val2 type : ", val2.Kind())
      
     // using the function
     indirectI := reflect.Indirect(val2)
     fmt.Println("indirectI  type : ", indirectI.Kind())
     fmt.Println("indirectI  value : ", indirectI)
  
}

Producción:

&val2 type :  ptr
indirectI  type :  slice
indirectI  value :  [1 2 3 4]

Ejemplo 2:

// Golang program to illustrate
// reflect.Indirect() Function
  
package main
  
import (
    "fmt"
    "reflect"
)
  
// Main function
func main() {
     var val1 []int               
     var val2 [3]string        
     var val3 = make(map[int]string) 
  
     var val4 reflect.Value = reflect.ValueOf(&val1)
     indirectI := reflect.Indirect(val4)
     fmt.Println("val1: ", indirectI.Kind())
  
  
     var val5 reflect.Value = reflect.ValueOf(&val2)
     indirectStr := reflect.Indirect(val5)
     fmt.Println("val2 type : ", indirectStr.Kind())
  
     var val6 reflect.Value = reflect.ValueOf(&val3)
     fmt.Println("&val3 type : ", val6.Kind())
  
     indirectM := reflect.Indirect(val6)
     fmt.Println("val3 type : ", indirectM.Kind())
  
}

Producción:

val1:  slice
val2 type :  array
&val3 type :  ptr
val3 type :  map

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 *