ホームページ > バックエンド開発 > Golang > Go で 1 つの型に対して複数のインターフェイスを実装するにはどうすればよいですか?

Go で 1 つの型に対して複数のインターフェイスを実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-24 06:39:15
オリジナル
358 人が閲覧しました

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 インターフェイスを使用して次のことを表現できるようになります。

このアプローチでは、カード構造体の実装の詳細が隠蔽されないことに注意してください。実装の詳細を本当に非表示にしたい場合は、ファクトリ関数を使用して 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 で 1 つの型に対して複数のインターフェイスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート