Función reflect.FieldByIndex() 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.FieldByIndex() en Golang se usa para obtener el campo anidado correspondiente al índice. Para acceder a esta función, es necesario importar el paquete reflect en el programa.

Sintaxis:

func (v Value) FieldByIndex(index []int) Value

Parámetros: esta función acepta solo parámetros individuales.

  • index : este parámetro es del tipo []int.

Valor devuelto: esta función devuelve el campo anidado correspondiente al índice.

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

Ejemplo 1:

// Golang program to illustrate
// reflect.FieldByIndex() Function 
   
package main
   
import (
    "fmt"
    "reflect"
)
   
// Main function 
func main() {
      
    tt:= reflect.StructOf([]reflect.StructField{
        {
            Name: "Height",
            Type: reflect.TypeOf(0.0),
            Tag:  `json:"height"`,
        },
        {
            Name: "Name",
            Type: reflect.TypeOf("abc"),
            Tag:  `json:"name"`,
        },
    })
      
    // use of FieldByIndex() method
    fmt.Println(tt.FieldByIndex([]int{0}))
  
}    

Producción:

{Height  float64 json:"height" 0 [0] false}

Ejemplo 2:

// Golang program to illustrate
// reflect.FieldByIndex() Function 
   
package main
   
import (
    "fmt"
    "reflect"
)
   
type User struct {
    Id   int
    Name string
    Age  int
}
   
type Manager struct {
         User 
    Title string
}
   
// Main function 
func main() {
      
    m := Manager{User: User{1, "Jack", 12}, Title: "123"}
    t := reflect.TypeOf(m)
         fmt.Printf("%#v\n", t.Field(0)) 
    fmt.Printf("%#v \n", t.Field(1))
      
    // use of FieldByIndex() method
    fmt.Printf("%#v \n", t.FieldByIndex([]int{0, 0}))
    fmt.Printf("%#v \n", t.FieldByIndex([]int{0, 1}))
    fmt.Printf("%#v \n", t.FieldByIndex([]int{0, 2}))
  
}

Producción:

reflect.StructField{Nombre:”Usuario”, PkgPath:””, Tipo:(*reflect.rtype)(0x4b1480), Etiqueta:””, Desplazamiento:0x0, Índice:[]int{0}, Anónimo:true}
reflect .StructField{Nombre:”Título”, PkgPath:””, Tipo:(*reflect.rtype)(0x4a1c20), Etiqueta:””, Desplazamiento:0x20, Índice:[]int{1}, Anónimo:falso}
reflect. StructField{Nombre:”Id”, PkgPath:””, Tipo:(*reflect.rtype)(0x4a14e0), Etiqueta:””, Desplazamiento:0x0, Índice:[]int{0}, Anónimo:falso}
reflect.StructField {Nombre:”Nombre”, PkgPath:””, Tipo:(*reflect.rtype)(0x4a1c20), Etiqueta:””, Desplazamiento:0x8, Índice:[]int{1}, Anónimo:false}
reflect.StructField{ Nombre:”Edad”, PkgPath:””, Tipo:(*reflect.rtype)(0x4a14e0), Etiqueta:””, Compensación:0x18, Índice:[]int{2}, Anónimo:falso}

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 *