"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Qual é a principal distinção entre reflect.Type e reflect.Value na reflexão Go?

Qual é a principal distinção entre reflect.Type e reflect.Value na reflexão Go?

Publicado em 2024-11-08
Navegar:595

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

Tipos e valores de reflexão em Go

Reflexões em Go permitem que os desenvolvedores inspecionem e manipulem tipos e valores em tempo de execução. Compreender suas distinções é crucial para o uso eficaz da reflexão.

Tipo versus valor na reflexão

Na reflexão, reflect.TypeOf(i) retorna um objeto reflect.Type , enquanto reflect.ValueOf(i) retorna um objeto reflect.Value.

reflect.Type

  • Fornece informações sobre o tipo, como seu nome, pacote e tipo subjacente.
  • Permite consultas sobre seus métodos, campos e outros dados relacionados ao tipo.
  • Não contém o valor real da variável passada para ele.

reflect.Value

  • Representa o valor real da variável passada para ele.
  • Permite ler e definir valores, manipulando os dados subjacentes e consultando seus métodos e campos.
  • Contém um método Type() que retorna seu reflect.Type.

Example

In o trecho 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 é um objeto reflect.Type que representa o tipo da variável apontada por i.
  • v é um objeto reflect.Value que representa o valor real da variável apontada por i.
  • tag é a tag do primeiro campo (nome) da estrutura Person obtida através do reflect.Type.
  • name é a representação em string do primeiro campo obtido através do reflect. .Value.

Ao compreender a diferença entre tipos e valores na reflexão, os desenvolvedores podem aproveitar o poder da reflexão em vários cenários, incluindo introspecção, invocação de método dinâmico e serialização de dados.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3