首頁 > 後端開發 > Golang > 如何在 Go 中為單一類型實作多個介面?

如何在 Go 中為單一類型實作多個介面?

Mary-Kate Olsen
發布: 2024-11-24 06:39:15
原創
399 人瀏覽過

How Can I Implement Multiple Interfaces in Go for a Single Type?

Go 中的多個介面

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板