ホームページ  >  記事  >  バックエンド開発  >  従来の継承を行わずに Go でポリモーフィズムをどのように実現できるでしょうか?

従来の継承を行わずに Go でポリモーフィズムをどのように実現できるでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-06 17:36:02903ブラウズ

How Can Polymorphism be Achieved in Go Without Traditional Inheritance?

Go 言語のポリモーフィズム: インターフェイスと構成を通じて達成する

オブジェクト指向プログラミングの基本概念であるポリモーフィズムにより、オブジェクトが異なる動作をすることが可能になります。クラスまたはタイプに基づいて。 Go では、従来の OO 言語とは異なり、ポリモーフィズムはインターフェイスと合成を通じて実現されます。

問題:

次のコードのような構造継承を使用して Go にポリモーフィズムを実装しようとしました。スニペットはエラーになります:

<code class="go">type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

func getFoo() Foo {
   return Bar{...}
}</code>

解決策:

Go では、ポリモーフィズムはインターフェイスと合成を通じて実現されます。インターフェイスは、型が実装する必要があるメソッドのセットを定義し、インターフェイスが予期されるあらゆる場所で型を多態的に使用できるようにします。

以下のコードは、Go でインターフェイスと合成を使用して多態性を実現する方法を示しています。

<code class="go">package main

import "fmt"

type Foo interface {
   printFoo()
}

type FooImpl struct {

}

type Bar struct {
   FooImpl
}

type Bar2 struct {
   FooImpl
}

func (f FooImpl) printFoo() {
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
   return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}</code>

このコード スニペットでは:

  • Foo はメソッド printFoo を定義するインターフェイスです。
  • FooImpl は Foo インターフェイスの具体的な実装です。
  • Bar と Bar2 は、FooImpl 型を埋め込み、Foo インターフェイスを間接的に実装する構造体です。
  • getFoo() は Bar のインスタンスを Foo 型として返し、ポリモーフィズムを示します。

Go はインターフェイスと合成を利用することで、従来の継承を必要とせずにポリモーフィズムを実現するための柔軟かつ効率的なアプローチを提供します。

以上が従来の継承を行わずに Go でポリモーフィズムをどのように実現できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。