コンポジションを使用して Go でポリモーフィズムを実現するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-21 10:42:14
オリジナル
549 人が閲覧しました

How to Achieve Polymorphism in Go Using Composition?

Go のポリモーフィズムを理解する: 構成ベースのアプローチ

Go では、オブジェクト指向言語とは異なり、ポリモーフィズムはインターフェイスを通じて実現されます。ポリモーフィズムを実装しようとする場合、構成の「基本」クラス/型の概念を避けることが重要です。

次の問題を考えてみましょう。

トランザクション用のフィールドと 2 つのフィールドを持つ BaseTX 構造体があります。特別なタイプ: RewardTX とAllowanceTX。後者には追加の AddField が必要です。さらに、オブジェクトをシリアル化して保存する前に特定のロジックを実行する関数logicAndSaveTXがあります。

ただし、現在の実装では、AddFieldプロパティは認識されません。

継承に依存する代わりに、より Go 慣用的なアプローチは、合成を使用することです。メタデータ構造体には、RewardTX とAllowanceTX の両方で使用される共有フィールドを含めることができます。各構造体は独自のlogicAndSaveTXメソッドを実装できます:

func (tx RewardTX) logicAndSaveTX() {
    // Logic on Metadata fields
    tx.Field1 = "overwritten"
    tx.Field2 = "logic done"
    // ...
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Logic on Metadata fields
    tx.Field1 = "overwritten"
    tx.Field2 = "logic done"
    tx.AddField = "more stuff"
    // ...
}
ログイン後にコピー

各型内で動作(メソッド)をカプセル化することで、ある型から別の型に操作を適用する際の落とし穴を回避できます。代わりに、管理する必要がある特定の型を操作する、明確で保守しやすいコードを設計できます。

以上がコンポジションを使用して Go でポリモーフィズムを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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