"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 > Incorporando estruturas no Go: ponteiro ou valor? Quando usar qual?

Incorporando estruturas no Go: ponteiro ou valor? Quando usar qual?

Publicado em 17/11/2024
Navegar:563

Embedding Structs in Go: Pointer or Value? When to Use Which?

Incorporando estruturas no Go: quando usar um ponteiro

Ao considerar incorporar uma estrutura dentro de outra, a decisão de usar um ponteiro ou surge um valor para o campo incorporado. Este artigo explora as nuances dessa escolha de implementação e fornece exemplos para ilustrar os possíveis benefícios e implicações.

Incorporação por ponteiro

A especificação Go permite incorporar estruturas como ponteiros ou valores. Para tipos sem interface, é permitido especificar um campo anônimo como um nome de tipo T ou um ponteiro para um nome de tipo sem interface *T.

Vantagens da incorporação por ponteiro:

  • Essa abordagem permite contar com funções que retornam estruturas por ponteiro para fins de inicialização.
  • É possível alterar dinamicamente a instância que está sendo estendida. Esse recurso é particularmente útil na implementação do padrão Flyweight, onde várias instâncias compartilham a mesma estrutura de dados subjacente.

Incorporação por valor

Incorporação da estrutura como um value incorpora todas as suas funcionalidades sem a necessidade de conhecimento de instanciação. Ele promove efetivamente os métodos da estrutura incorporada para a estrutura envolvente.

Considere os seguintes exemplos:

type Job struct {
    Command string
    *log.Logger
}

Neste exemplo, a estrutura Job incorpora um ponteiro para o tipo log.Logger. Essa abordagem permite que a estrutura do Job acesse métodos do Logger, ao mesmo tempo que permite a atribuição dinâmica de diferentes instâncias do Logger.

type Job struct {
    Command string
    log.Logger
}

Aqui, a estrutura Job incorpora diretamente o tipo log.Logger como um valor. Os métodos Logger promovidos agora podem ser acessados ​​diretamente da estrutura Job.

Conclusão

Ambos a incorporação por ponteiro e por valor têm suas vantagens e considerações exclusivas. A escolha entre as duas abordagens depende se se deseja ou não a atribuição dinâmica ou a promoção de métodos. Compreender as implicações de cada método pode ajudar na tomada de decisões informadas ao incorporar estruturas em Go.

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