Manipulação de interfaces em Go
As interfaces Go fornecem um mecanismo poderoso para abstração. No entanto, seu uso pode representar certos desafios ao lidar com múltiplas interfaces e tipos concretos.
Compreendendo as interfaces Go
Ao contrário de linguagens como C e Java, Go não oferece suporte direto herança de classe. Em vez disso, as interfaces servem como uma forma de polimorfismo que permite que tipos não relacionados implementem o mesmo conjunto de métodos. Eles não definem nenhum detalhe de implementação subjacente.
Múltiplas interfaces e implementação
No seu exemplo, você encontra um problema ao tentar acessar a representação de string ("String( )") para uma instância da interface "Cartão". Isso ocorre porque a interface em si não define esse método.
Práticas recomendadas para design de interface
Para resolver esse problema e otimizar o design de sua interface, considere o seguinte:
Declarar interfaces prematuras (se necessário): Declare interfaces apenas antes da implementação se:
Abordagem Alternativa
Em vez de usar uma interface para definir a API "Card" e conversão de string, considere usar embedding:
type Card struct { cardNum int face string suit string } // Interface for the Card's game-related behavior type GameCard interface { GetFace() string GetSuit() string } // Embedded interface for string conversion type Stringer interface { String() string } // Implement both interfaces on the Card type func (c *Card) GetFace() string { return c.face } func (c *Card) GetSuit() string { return c.suit } func (c *Card) String() string { return fmt.Sprintf("%s%s ", c.GetFace(), c.GetSuit()) } // Usage: func main() { // Create a Card instance and access its methods card := Card{cardNum: 0} fmt.Println(card.GetFace()) fmt.Println(card.GetSuit()) fmt.Println(card.String()) }
Essa abordagem permite definir interfaces separadas para diferentes interesses (lógica do jogo e conversão de strings) e implementá-las na mesma estrutura.
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