"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 > Você pode obter herança de método sem incorporar estruturas?

Você pode obter herança de método sem incorporar estruturas?

Publicado em 2024-11-07
Navegar:119

Can You Achieve Method Inheritance in Go Without Embedding Structs?

Estruturas incorporadas: uma exploração da herança de métodos

Compreendendo a herança de métodos em Go

In Go, a capacidade de herdar métodos de um tipo para outro é alcançada principalmente por meio de estruturas incorporadas. Esta técnica envolve incorporar uma estrutura dentro de outra, permitindo que a estrutura externa acesse e utilize os métodos da estrutura incorporada.

Um exemplo de estruturas incorporadas

Considere o seguinte trecho de código:

type Properties map[string]interface{}

func (p Properties) GetString(key string) string {
    return p[key].(string)
}

type Nodes map[string]*Node

type Node struct {
    *Properties
}

Neste exemplo, a estrutura Node incorpora a estrutura Properties, criando uma estrutura de dados composta. A estrutura Properties define um método chamado GetString que retorna um valor de string associado a uma determinada chave. Como a estrutura Node incorpora a estrutura Properties, ela pode acessar e usar diretamente o método GetString sem a necessidade de delegação explícita.

Limitações de estruturas incorporadas

Ao incorporar estruturas é uma forma eficaz de herdar métodos, mas também tem certas limitações. Uma limitação importante é que os campos da estrutura incorporada devem ser inicializados explicitamente ao criar uma instância da estrutura externa. Isso pode levar a códigos detalhados e repetitivos, especialmente ao trabalhar com estruturas de dados complexas. herança. A solução proposta envolvia atribuir diretamente o tipo de estrutura Properties à estrutura Node, eliminando a necessidade de inicialização explícita da estrutura incorporada.

type Properties map[string]interface{} func (p Propriedades) GetString(chave string) string { retornar p[chave].(string) } tipo Mapa de nós[string]*Nó type Node Properties

As limitações das abordagens alternativas

type Properties map[string]interface{}

func (p Properties) GetString(key string) string {
    return p[key].(string)
}

type Nodes map[string]*Node

type Node Properties

Conclusão

Em Go, incorporação de estruturas continua sendo o principal mecanismo para herança de métodos. Embora tenha certas limitações, fornece uma maneira robusta e eficiente de criar estruturas de dados compostas com funcionalidade compartilhada. Abordagens alternativas que tentam evitar estruturas incorporadas podem encontrar limitações e não são suportadas pela especificação da linguagem.

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