"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 > Como posso acessar o tipo de estrutura Go sem criar uma instância?

Como posso acessar o tipo de estrutura Go sem criar uma instância?

Publicado em 15/11/2024
Navegar:685

How Can I Access the Type of a Go Struct Without Creating an Instance?

Acessando Reflect.Type sem criação de estrutura física

No Go, carregar dinamicamente soluções para problemas requer acessar o tipo de estruturas sem criá-las fisicamente . Embora as soluções existentes exijam a criação e zeragem de estruturas antes do registro do tipo, existe uma abordagem mais eficiente.

Pode-se aproveitar o reflect.TypeOf((*Struct)(nil)).Elem() operação. Ao criar um ponteiro nulo, a alocação de espaço é evitada. O método Elem recupera o tipo de elemento de ponteiros, matrizes, fatias, canais e mapas.

Por exemplo, considere o SolutionRegistry fornecido que permite o carregamento dinâmico de solucionadores para problemas do "Projeto Euler". Para registrar um tipo de estrutura, a implementação atual requer a criação e inicialização da estrutura.

type DummySolution struct {
    data [100 * 1024 * 1024 * 1024]uint8
}

Para otimizar este processo, em vez de criar uma instância de DummySolution, pode-se utilizar reflect.TypeOf((*DummySolution)(nil)).Elem() para obter seu tipo:

func Register(sol Solution) {
    solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem())
}

Esta técnica elimina efetivamente a necessidade de instanciação de estrutura física enquanto registra seu tipo para carregamento dinâmico futuro.

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