Go のインターフェイスを使用して、コードを重複させずにさまざまな型のメソッドを実装するにはどうすればよいですか?

DDD
リリース: 2024-11-15 06:35:02
オリジナル
957 人が閲覧しました

How Can Interfaces in Go Be Used to Implement Methods for Different Types Without Code Duplication?

Go でインターフェイスを使用したさまざまな型のメソッドの実装

Go では、インターフェイスは、さまざまな型で使用できるメソッドのセットを定義するメカニズムを提供します。埋め込む。これにより、異なる型が共通の操作セットを共有できる多態性の動作が可能になります。

問題ステートメント

必要な 2 つの構造体 First と Second があるとします。 PrintStr() というメソッドを定義するインターフェイス A を実装します。各構造体には str という名前の文字列フィールドがあります。ただし、PrintStr() メソッドを両方の構造体に個別に実装すると、冗長になります。

提案された解決策

次の単一の実装が可能であると考える人もいるかもしれません。両方の構造体に対して PrintStr() を A インターフェイス自体で定義します。ただし、インターフェイスはデータを運ばないため、このアプローチは機能しません。

埋め込みと実装

インターフェイス上に単一の実装を作成する代わりに、基本型である WithString を First と Second の両方に埋め込みます。 WithString 型には str フィールドがあり、PrintStr() メソッドが実装されます。 WithString を埋め込むことにより、First と Second の両方が間接的に str フィールドと PrintStr() 実装を取得します。これにより、最小限の重複で A インターフェイスを実装できます。

コード例

type WithString struct {
    str string
}

type First struct {
    WithString
}

type Second struct {
    WithString
}

type A interface {
    PrintStr() //print First.str or Second.str
}

func (w WithString) PrintStr() {
    fmt.Print(w.str)
}
ログイン後にコピー

使用法

a := First{
    WithString: WithString{
        str: "foo",
    },
}
ログイン後にコピー

このアプローチにより、コードの重複を避けながら、さまざまな型に共通のメソッドを実装できます。

以上がGo のインターフェイスを使用して、コードを重複させずにさまざまな型のメソッドを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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