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.
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