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中文網其他相關文章!