Estruturas de incorporação: quando preferir ponteiros
Ao incorporar uma estrutura dentro de outra, há duas opções: usar um ponteiro ou um valor incorporado . Para orientar essa decisão, é importante entender as especificações e considerar as vantagens de cada abordagem.
Ponteiros vs. Valores Embutidos
De acordo com a especificação Go, um O campo anônimo (também conhecido como campo incorporado) pode ser declarado como um nome de tipo ou como um ponteiro para um nome de tipo que não seja de interface. Isso significa que você tem a opção de usar o tipo log.Logger ou um ponteiro *log.Logger para o campo Logger no exemplo a seguir:
type Job struct {
Command string
*log.Logger
}
Benefícios dos ponteiros
O artigo "Incorporação no Go" de Eric Urban destaca as vantagens de incorporar um ponteiro, que é conhecido como "incorporar por ponteiro ." Isso inclui:
Exemplo de incorporação de ponteiro
type Bitmap struct{
data [4][5]bool
}
type Renderer struct{
*Bitmap //Embed by pointer
on uint8
off uint8
}
Neste exemplo, o tipo Renderer incorpora um Bitmap por ponteiro. Isso significa que várias instâncias do Renderer podem compartilhar uma única instância do Bitmap e personalizar seu comportamento de forma independente.
Limitações técnicas
É importante observar que você não pode usar ponteiros para ponteiros ou ponteiros para interfaces como campos anônimos. Essa restrição decorre do fato de esses tipos não possuírem métodos, o que é um aspecto fundamental da incorporação. Os métodos são promovidos do tipo incorporado para o tipo incorporado, permitindo que você os acesse diretamente.
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