Go 不支持多重继承,但可以为单个类型实现多个接口。这允许您定义符合多个接口要求的类型。
在您的示例中,您有一个 Card 接口和一个实现 Card 接口的卡结构。您希望能够使用 Card 接口来表示卡片,但您还希望有卡片的字符串表示形式。
要解决这个问题,您可以定义一个 Stringer 接口:
type Stringer interface { String() string }
然后让卡片结构实现 Card 和 Stringer 接口:
type card struct { cardNum int face string suit string } 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()) }
这将允许您使用 Card 接口来表示卡片,并且您还可以使用 Stringer 接口来获取卡片的字符串表示形式。
请注意,这种方法不会隐藏卡片结构的实现细节。如果你想真正隐藏实现细节,你可以使用工厂函数来创建 Card 值,然后只将 Card 接口返回给客户端。
func NewCard(num int) Card { newCard := card{ cardNum: num, face: faces[num%len(faces)], suit: suits[num/len(faces)], } return &newCard }
这将允许你在不暴露的情况下创建 Card 值卡结构体的实现细节。
以上是如何在 Go 中为单一类型实现多个接口?的详细内容。更多信息请关注PHP中文网其他相关文章!