"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cuál es la distinción clave entre reflect.Type y reflect.Value en la reflexión de Go?

¿Cuál es la distinción clave entre reflect.Type y reflect.Value en la reflexión de Go?

Publicado el 2024-11-08
Navegar:234

What is the key distinction between reflect.Type and reflect.Value in Go reflection?

Tipos y valores de reflejos en Go

Los reflejos en Go permiten a los desarrolladores inspeccionar y manipular tipos y valores en tiempo de ejecución. Comprender sus distinciones es crucial para un uso eficaz de la reflexión.

Tipo versus valor en reflexión

En la reflexión, reflect.TypeOf(i) devuelve un objeto reflect.Type , mientras que reflect.ValueOf(i) devuelve un objeto reflect.Value.

reflect.Type

  • Proporciona información sobre el tipo, como su nombre, paquete y tipo subyacente.
  • Permite consultas sobre sus métodos, campos y otros datos relacionados con el tipo.
  • No contiene el valor real de la variable que se le pasa.

reflect.Value

  • Representa el valor real de la variable que se le pasa.
  • Permite leer y configurar valores, manipulando los datos subyacentes y consultar sus métodos y campos.
  • Contiene un método Type() que devuelve su reflect.Type.

Ejemplo

En el fragmento de código:

func show(i interface{}) {
    switch t := i.(type) {
    case *Person:
        t := reflect.TypeOf(i)  // Get the type of *Person
        v := reflect.ValueOf(i)  // Get the value of i
        tag := t.Elem().Field(0).Tag
        name := v.Elem().Field(0).String() 
    }
}
  • t es un objeto reflect.Type que representa el tipo de variable apuntada por i.
  • v es un objeto reflect.Value que representa el valor real de la variable apuntada por i.
  • tag es la etiqueta del primer campo (nombre) de la estructura Person obtenida a través de reflect.Type.
  • name es la representación de cadena del primer campo obtenida a través de reflect. .Value.

Al comprender la diferencia entre tipos y valores en la reflexión, los desarrolladores pueden aprovechar el poder de la reflexión en varios escenarios, incluida la introspección, la invocación de métodos dinámicos y la serialización de datos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3