"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 > As estruturas incorporadas podem ser substituídas pela herança do método em Go?

As estruturas incorporadas podem ser substituídas pela herança do método em Go?

Postado em 2025-02-06
Navegar:292

  Can Embedded Structs Be Replaced for Method Inheritance in Go?

estruturas incorporadas e herança do método

existe uma alternativa às estruturas incorporadas para herdar métodos?

sim, é Uma maneira alternativa para herdar métodos de um tipo sem usar estruturas incorporadas. No entanto, requer uma compreensão mais profunda do sistema de tipo de Go. Como se eles fizessem parte da estrutura contendo. Este é um recurso poderoso que pode ser usado para criar herança entre os tipos. promovido automaticamente para a estrutura contendo. Para promover métodos, a estrutura incorporada deve ser anônima. Eles eram métodos de estrutura contendo. Isso é conseguido seguindo estas regras:

se o campo anônimo tiver o tipo t, os métodos promovidos têm receptores do tipo t e *t.

se o campo anônimo tiver o tipo *t , os métodos promovidos têm receptores do tipo t ou *t.

exemplo

considere o seguinte código:

digite propps Map [String] Interface {} func (p props) getString (string de chave) string { Retornar P [chave]. (String) } TIPO NODE STRUCT { Adereços } func main () { nó: = nó {"test": "foo"} fmt.println (node.getString ("test")) // saída: foo }

Neste exemplo, o nó Struct incorpora uma estrutura anônima de props de tipos. Isso permite que o método GetString dos adereços seja promovido a Node. Ao passar um ponteiro para a função do receptor, você pode acessar os campos e métodos da estrutura subjacente sem precisar incorporá -la. Usando um receptor de ponteiro:

    digite props map [string] interface {} func (p *adereços) getString (string de chave) string { Retornar P [chave]. (String) } TIPO NODE STRUCT { Adereços } func main () { nó: = & node {props {"test": "foo"}} fmt.println (node.getString ("test")) // saída: foo }
  • Neste exemplo, usamos um receptor de ponteiro para o método gettring. Isso nos permite acessar os campos e métodos da estrutura de adereços subjacentes sem precisar incorporá -la. Nem sempre são a melhor escolha. Nos casos em que a promoção do método não é desejada ou necessária, o uso de um receptor de ponteiro pode fornecer uma alternativa mais flexível e de desempenho.
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