Go 言語では、関数をインターフェイス値として保存してポリモーフィズムを実現できます。つまり、インターフェイスを定義し、一連のメソッド シグネチャを指定します。インターフェイスを実装する型を作成し、そのインターフェイスに対してこれらのメソッドを実装します。インターフェース値を入力として受け入れる関数を定義します。実際の型に関係なく、関数内のインターフェイス値のみを使用するメソッド。ポリモーフィズムを実現するには、異なる型の値を持つ関数を呼び出します。
Go 言語では、関数をインターフェイス値として保存できるため、ポリモーフィズムを実装できます。 Go 言語自体はオブジェクト指向ではありませんが。
インターフェイスは、一連のメソッドのシグネチャを定義します。インターフェイスを実装する型は、これらのメソッドを実装する必要があります。たとえば、Shape
インターフェイスを定義します。
type Shape interface { Area() float64 }
を実装します。 次のように Shape
インターフェイスを実装する型を作成できます。 :
type Rectangle struct { width, height float64 } func (r Rectangle) Area() float64 { return r.width * r.height } type Circle struct { radius float64 } func (c Circle) Area() float64 { return math.Pi * c.radius * c.radius }
Shape
インターフェイスを作成したので、関数をその値として使用できます。これを行うには、Shape
インターフェイス値を入力として受け入れる calculateArea
関数を定義します。
func calculateArea(s Shape) float64 { return s.Area() }
ここで、ポリモーフィズムがどのように実装されるかを示す例を作成してみましょう。
func main() { // 创建一个 Rectangle 和一个 Circle r := Rectangle{width: 2, height: 3} c := Circle{radius: 5} // 使用函数计算他们的面积 areaR := calculateArea(r) areaC := calculateArea(c) fmt.Println("Rectangle area:", areaR) fmt.Println("Circle area:", areaC) }
出力:
Rectangle area: 6 Circle area: 78.53981633974483
この例では、calculateArea
関数は、渡された Shape
インターフェイスの Area
のみを使用します。実際の型が Rectangle
か Circle
であるかに関係なく、メソッド内で使用されます。これはポリモーフィズムの具体化です。
以上がオブジェクト指向プログラミングにおける golang 関数のポリモーフィズムの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。