「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 従来のメカニズムを使わずに Go はどのようにしてポリモーフィズムを実現するのでしょうか?

従来のメカニズムを使わずに Go はどのようにしてポリモーフィズムを実現するのでしょうか?

2024 年 11 月 17 日に公開
ブラウズ:129

How Does Go Achieve Polymorphism Without Traditional Mechanisms?

Go 言語でのポリモーフィズムの探索

オブジェクト指向プログラミングでは、ポリモーフィズムにより、オブジェクトがクラスに基づいて異なる動作を示すことができます。しかし、Go では、ポリモーフィズムの概念は従来の意味では実装されていません。この背後にある理由を掘り下げ、Go で同様の機能を実現する方法を探ってみましょう。

Go に従来のポリモーフィズムがない理由

Go は従来のオブジェクト指向言語ではありません。

  • Composition: 他のオブジェクトまたはインターフェイスで構成されるオブジェクト。
  • Interfaces: を定義するコントラクトを使用することで、別のアプローチを採用します。

オブジェクト指向言語とは異なり、Go はメソッドのオーバーライドやメソッドのオーバーライドをサポートしていません。仮想メソッド。これにより、Go はより高いレベルの型安全性を維持できるようになります。

コンポジションとインターフェイスを使用したポリモーフィズムの実装

Go でポリモーフィズムのような動作を実現するには、次のテクニックを使用できます:

  1. 共通インターフェイスの作成: 派生型に必要な共通の動作またはメソッドを表すインターフェイスを定義します。 implement.
  2. インターフェイスの実装: インターフェイスのメソッドを派生型に実装し、それぞれ独自の一意の実装を提供します。
  3. コンポジションの使用: Compose共通インターフェイスをフィールドとして使用して派生型を作成します。これにより、すべての派生型を共通インターフェイスのインスタンスとして扱うことができます。

Example:

package main

import "fmt"

// Common interface
type Foo interface {
    printFoo()
}

// Derived type with unique implementation
type FooImpl struct{}

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

// Derived type composed using the common interface
type Bar struct {
    FooImpl
}

// Function returning the common interface
func getFoo() Foo {
    return Bar{}
}

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

この例では、Foo は共通インターフェイス、FooImpl は独自の実装を持つ派生型、Bar は FooImpl を使用して構成された派生型です。 getFoo() 関数は Foo インターフェイスのインスタンスを返すため、さまざまな派生型を 1 つのインターフェイス型として扱うことができます。

このアプローチは、さまざまな派生型をインスタンスとして処理できるようにすることで、Go にポリモーフィズムの形式を提供します。共通インターフェースの

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3