ホームページ  >  記事  >  バックエンド開発  >  golang はどのようにポリモーフィックになっているのでしょうか?

golang はどのようにポリモーフィックになっているのでしょうか?

zbt
zbtオリジナル
2023-12-15 15:56:221191ブラウズ

Golang は、インターフェイスの型とメソッド バインディングを通じてポリモーフィズムを実装します。詳細な導入: 1. それぞれ Shape インターフェイスを実装する 2 つの構造タイプ Circle と Rectangle を作成します; 2. Circle 構造と Rectangle 構造はそれぞれ Shape インターフェイスの Area() メソッドを実装し、それによってポリモーフィズムを実現します。

golang はどのようにポリモーフィックになっているのでしょうか?

このチュートリアルのオペレーティング システム: Windows 10 システム、Go 1.20.1 バージョン、DELL G3 コンピューター。

ポリモーフィズムはオブジェクト指向プログラミングにおける重要な概念であり、これにより、異なるタイプのオブジェクトが同じメッセージに対して異なる応答を行うことができます。囲碁で この言語には、クラスと継承という従来の概念はありませんが、インターフェイスの型とメソッド バインディングを通じてポリモーフィズムを実現できます。以下ではGoでポリモーフィズムを実装する方法を詳しく説明します。

インターフェースとポリモーフィズム

Go で ポリモーフィズムは通常、インターフェイスを使用して実装されます。インターフェイスは、オブジェクトの動作を定義する型の抽象化です。オブジェクトは 1 つ以上のインターフェイスを実装でき、インターフェイス タイプはオブジェクトを表すために使用されます。インターフェイスはさまざまなタイプのオブジェクトを参照できるため、インターフェイスのタイプを通じてポリモーフィズムを実現できます。

インターフェイス定義

次に、簡単なインターフェイス定義の例を示します。

type Shape interface {
Area() float64
}
type Printable interface {
Print()
}

上の例では、Shape と Printable という 2 つのインターフェイスを定義します。 Shape インターフェイスには Area() が含まれています 形状の面積を計算するメソッド。Printable インターフェイスには、オブジェクト情報を印刷するための Print() メソッドが含まれています。

ポリモーフィックな実装

インターフェイスのポリモーフィズムは、インターフェイス タイプのメソッドを実装することによって実現されます。以下は、Go でポリモーフィズムを実装する方法を示す簡単な例です。

最初に、Circle と Rectangle という 2 つの構造タイプを作成し、それぞれ Shape インターフェイスを実装します:

type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return math.Pi * c.Radius * c.Radius
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}

上の例では、Circle 構造と Rectangle 構造はそれぞれ Shape インターフェイスを実装します。 ) 方法。これは、それらをすべて Shape として扱うことができることを意味します。 型はポリモーフィズムを実現するために使用されます。

次に、Shape 型のパラメーターを受け取り、その面積を計算する関数を作成できます。

func calculateArea(s Shape) {
fmt.Println("Area:", s.Area())
}

ここで、calculateArea 関数を使用して、さまざまな種類のオブジェクトの面積を計算できます。形状、そして形状の種類は関係ありません。例:

func main() {
c := Circle{Radius: 5}
r := Rectangle{Width: 3, Height: 4}
calculateArea(c) // 输出:Area: 78.53981633974483
calculateArea(r) // 输出:Area: 12
}

main 関数では、円 c と四角形 r を作成し、それぞれ CalculateArea 関数を呼び出してそれらの面積を計算します。それでも CalculateArea 関数のパラメーターの型は Shape インターフェイス型ですが、それでもさまざまな形状の面積を正しく計算でき、これは多態性の具体化です。

型アサーションと型判定

インターフェイス多態性を利用する場合、プログラム中で特定の型に応じて異なる処理を行う必要がある場合があります。このとき、型アサーションと型判定を使用して、インターフェイス値の特定の型を決定し、対応する操作を実行できます。

たとえば、型判断を使用して、インターフェイス値の特定の型を判断できます。

func printInfo(p Printable) {
if shape, ok := p.(Shape); ok {
fmt.Println("This object is a shape.")
}
}

上の例では、型判断を使用して、受信した Printable インターフェイスが Shape も実装しているかどうかを判断します。インターフェース。

型アサーションを使用して、インターフェイス値を特定の型に変換できます:

func printArea(p Printable) {
if shape, ok := p.(Shape); ok {
fmt.Println("Area:", shape.Area())
}
}

上記のコードでは、Printable インターフェイス値を Shape 型としてアサートし、その Area( ) 領域を印刷するメソッド。

概要

Go で この言語にはクラスと継承の伝統的な概念はありませんが、インターフェイスとメソッドを通じてポリモーフィズムを十分に実現できます。インターフェイス ポリモーフィズムの助けを借りて、コードをより柔軟かつ拡張可能にし、さまざまな種類のオブジェクトを処理する際にプログラムをより多用途かつ簡潔にすることができます。同時に、型アサーションと型判断を使用すると、ポリモーフィック コードをよりターゲットを絞ったものにし、さまざまな種類のオブジェクトの個人化されたニーズをより適切に処理できるようになります。

以上がgolang はどのようにポリモーフィックになっているのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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