[ir idioma] 5.1.1 Concepto básico de reflexión

La reflexión es un concepto poderoso y avanzado en el lenguaje Go, que nos permite realizar una introspección de variables en tiempo de ejecución, incluidos tipos de variables, valores, métodos, etc.

Primero, para usar la reflexión, necesitamos importar  reflect el paquete:

import "reflect"

Tipo reflejado (Tipo) y valor (Valor)

En Go, cada variable tiene un tipo y un valor. Por ejemplo, para  var x int = 3, x el tipo es  inty el valor es  3.

Podemos usar  reflect.TypeOf y  reflect.ValueOf para obtener el tipo y valor de una variable:

var x int = 3
fmt.Println(reflect.TypeOf(x))  // 输出 "int"
fmt.Println(reflect.ValueOf(x)) // 输出 "3"

Estas dos funciones devuelven  reflect.Type y  reflect.Value escriben objetos, que contienen la información de tipo y valor de la variable original.

Manipular el valor de reflexión

reflect.Value Proporciona una serie de métodos para manipular los valores reflejados. Por ejemplo, podemos  Int() obtener el valor entero del valor reflejado con el método:

var x int = 3
v := reflect.ValueOf(x)
fmt.Println(v.Int()) // 输出 "3"

Tenga en cuenta que Int() el método entrará en pánico si el tipo del valor no es un número entero. Si no está seguro del tipo de valor, primero debe  Kind() verificar el tipo de valor con el método:

v := reflect.ValueOf(x)
if v.Kind() == reflect.Int {
    
    
    fmt.Println(v.Int()) // 输出 "3"
}

modificar el valor mediante reflexión

También puede modificar el valor mediante la reflexión, pero debe tenerse en cuenta que reflect.ValueOf se devuelve un valor de reflexión no modificable. Si desea modificar la variable original, debe usar  reflect.ValueOf(&x).Elem() la reflexión para obtener la dirección de la variable y luego  SetInt modificarla con el método:

var x int = 3
v := reflect.ValueOf(&x).Elem()
v.SetInt(4)
fmt.Println(x) // 输出 "4"

El método aquí  Elem() devuelve el valor de reflexión de la variable señalada por el puntero, que es modificable.

Resumir

La reflexión es una característica muy poderosa del lenguaje Go que nos permite hacer introspección y modificar variables en tiempo de ejecución. Sin embargo, el uso de la reflexión también debe ser cauteloso, porque la seguridad del tipo de las operaciones de reflexión se verifica en tiempo de ejecución, no en tiempo de compilación. Esto significa que si comete un error al escribir su código de reflexión, puede entrar en pánico en tiempo de ejecución.

Lo anterior es el concepto básico de reflexión, espero que te sea de ayuda. Si tiene alguna pregunta, no dude en preguntar.

Supongo que te gusta

Origin blog.csdn.net/u010671061/article/details/132268622
Recomendado
Clasificación