Go 中的处理接口
Go 接口提供了强大的抽象机制。然而,在处理多个接口和具体类型时,它们的使用可能会带来一定的挑战。
理解 Go 接口
与 C 和 Java 等语言不同,Go 不支持直接类继承。相反,接口充当多态性的一种形式,允许不相关的类型实现同一组方法。它们没有定义任何底层实现细节。
多个接口和实现
在您的示例中,您在尝试访问字符串表示形式时遇到问题(“String( )") 的“Card”接口实例的方法。这是因为接口本身没有定义该方法。
界面设计最佳实践
要解决此问题并优化您的界面设计,请考虑以下事项:
声明过早的接口(如果需要):仅在实现之前声明接口,如果:
替代方法
而不是使用接口来定义“卡”API和字符串转换,考虑使用嵌入:
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()) }
这种方法允许您为不同的关注点(游戏逻辑和字符串转换)定义单独的接口,并在同一结构上实现它们。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3