Golang refleja

Golang refleja
Bienvenido a otro tutorial de Golang. Aprenderemos sobre la reflexión en el lenguaje de programación GO en este caso.

Que es la reflexión?

La reflexión se refiere al método de analizar e inspeccionar variables y sus valores durante el tiempo de ejecución. Es una técnica muy útil cuando se trata con componentes abstractos de una estructura. Esto no significa que se limite a estructuras. Discutamos varios componentes de la reflexión en Golang.

Importaciones requeridas

En Go, se proporciona la capacidad de realizar reflexión utilizando el paquete reflejo. Por lo tanto, necesitamos importarlo antes de usar. Puede importarlo como se muestra en el fragmento a continuación:

importar "reflejar"

Una vez importado, puede comenzar a usar los métodos y funcionalidades proporcionados.

Tipo de()

Un método del paquete reflejar es el typeof (). Esta función le permite determinar el tipo de variable.

Para usarlo, podemos hacer:

paquete principal
importar (
"FMT"
"reflejar"
)
func Main ()
var1: = 100
var2: = 3.14159
var3: = "hola"
var4: = […] int 1, 2, 3
var5: = map [string] String
var6: = verdadero
var7: = [] int 1, 2, 4
fmt.Println ("type =>", reflejar.Typeof (var1))
fmt.Println ("type =>", reflejar.Typeof (var2))
fmt.Println ("type =>", reflejar.Typeof (var3))
fmt.Println ("type =>", reflejar.Typeof (var4))
fmt.Println ("type =>", reflejar.Typeof (var5))
fmt.Println ("type =>", reflejar.Typeof (var6))
fmt.Println ("type =>", reflejar.Typeof (var7))

El ejemplo anterior usa reflejar.Método typeof () para verificar los tipos de datos de varias variables. La salida resultante es como se muestra:

Tipo => int
Type => float64
Type => String
Tipo => [3] int
Type => map [cadena] cadena
Tipo => bool
Type => [] int

Valor de()

El reflejo.El método valueOf () devuelve el valor de una variable específica. Un ejemplo es como se muestra:

fmt.Println ("valor =>", reflejar.Valor de (var4))

Esto debería devolver el valor de la variable var4.

Producción:

Valor => [1 2 3]

Copiar()

El método de copia se utiliza para copiar los elementos de una fuente específica a un destino especificado. La función realizará la operación de copia hasta que el destino esté lleno de los elementos de la fuente.

La función devuelve el número de elementos copiados de la fuente al destino.

Recuerde que el destino y la fuente deben ser del mismo tipo.

Considere el ejemplo que se muestra a continuación:

paquete principal
importar (
"FMT"
"reflejar"
)
func Main ()
src: = reflejar.ValueOf ([] string "A", "B", "C")
Dest: = reflejar.ValueOf ([] string "d", "e", "f")
items_copied: = reflejar.Copia (SRC, Dest)
fmt.Println ("Elementos copiados:", elementos_copied)
fmt.Println ("Fuente:", SRC)
fmt.Println ("Destino:", Dest)

En el ejemplo anterior, usamos el reflejo.Valuef () para lanzar la variable a su tipo. Luego usamos el método Copy () para copiar los elementos del Dest a la variable SRC. La salida resultante es como se muestra:

Elementos copiados: 3
Fuente: [D E F]
Destino: [D E F]

Swapper ()

El método Swapper () le permite intercambiar elementos en una porción. Un ejemplo es como se muestra a continuación:

LST: = [] int 1, 2, 3, 4, 5
lst_swp: = reflejar.Swapper (LST)
fmt.Printf ("Antes de intercambio: %v \ n", LST)
LST_SWP (0, 4)
fmt.Printf ("After Swap: %V \ n", LST)

El ejemplo anterior intercambia la porción del primer índice hasta el último. La salida es como se muestra:

Antes de intercambiar: [1 2 3 4 5]
Después del intercambio: [5 2 3 4 1]

Numfield ()

El método numfield () devuelve el número de campos dentro de una estructura dada. Un ejemplo es como se muestra:

escriba my_struct struct
Cadena Field_1
campo_2 int
campo_3 float64
campo_4 bool

struct_1: = my_struct "a", 1, 3.14, falso
elenco: = reflejar.TypeOf (struct_1)
fmt.Println (el elenco.Numfield ())

Lo anterior debe devolver el número de campos en la estructura. Producción:

4

Campo()

El método Field () devuelve el nombre y el tipo de datos de los campos dentro de una estructura.

struct_1: = my_struct "a", 1, 3.14, falso
elenco: = reflejar.TypeOf (struct_1)
para i: = 0; i < cast.NumField(); i++
Campo: = Cast.Campo (i)
fmt.Println (campo.Nombre, campo.Tipo)

El programa anterior devuelve el nombre de los campos en la estructura y sus tipos de datos. Producción:

Cadena Field_1
campo_2 int
campo_3 float64
campo_4 bool

Makechan ()

El método makechan () crea un canal de tipo especificado y un canal de tamaño de buffers. Ejemplo:

Var str chan cadena
var str_type reflejar.Valor = reflejar.Valor de (y str)
new_channel: = reflejar.Makechan (reflejar.Indirecto (str_type).Tipo (), 256)
fmt.Println ("Channel Kind:", new_channel.Amable())
fmt.Println ("Cape de canal", new_channel.Gorra())

Lo anterior debe crear un canal de tipo Chan y un tamaño de amortiguación de 256. La salida resultante es como se muestra:

Tipo de canal: Chan
Cape de canal: 256

Makemap ()

Como su nombre indica, la función makemap () crea un mapa del tipo de datos definido.

Tome el ejemplo a continuación:

Var str map [cadena] cadena
var str_type reflejar.Valor = reflejar.Valor de (y str)
my_map: = reflejar.Makemap (reflejar.Indirecto (str_type).Tipo())
fmt.Println ("kind =>", my_map.Amable())

Esto crea un nuevo mapa. Producción:

Tipo => mapa

Conclusión

En esta guía, rayamos la superficie de usar el paquete reflejo en Go. Tenga en cuenta que el paquete ofrece mucho más de lo que se discute aquí.