Maison >développement back-end >Golang >Implémentation du polymorphisme des fonctions Golang dans la programmation orientée objet

Implémentation du polymorphisme des fonctions Golang dans la programmation orientée objet

PHPz
PHPzoriginal
2024-05-04 16:03:02817parcourir

En langage Go, les fonctions peuvent être stockées sous forme de valeurs d'interface, réalisant ainsi un polymorphisme : définir une interface et spécifier un ensemble de signatures de méthode. Créez un type qui implémente l'interface et implémente ces méthodes pour celle-ci. Définissez une fonction qui accepte les valeurs d'interface en entrée. Méthodes qui utilisent uniquement la valeur d'interface dans la fonction, quel que soit le type réel. Appelez des fonctions avec des valeurs de différents types pour obtenir le polymorphisme.

Implémentation du polymorphisme des fonctions Golang dans la programmation orientée objet

Implémentation du polymorphisme des fonctions du langage Go dans la programmation orientée objet

Dans le langage Go, les fonctions peuvent être stockées sous forme de valeurs d'interface, ce qui nous permet d'obtenir un polymorphisme même si le langage Go lui-même n'est pas orienté objet.

Interface

Une interface définit les signatures d'un ensemble de méthodes qui doivent être implémentées par les types qui implémentent l'interface. Par exemple, nous définissons une interface Shape : 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 接口,我们可以使用函数作为其值。为此,我们定义一个 calculateArea 函数,它接受一个 Shape 接口值作为输入。

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 还是 Circlerrreee

Type implémente l'interface 🎜🎜 Nous pouvons créer un type qui implémente l'interface Shape comme suit : 🎜rrreee🎜Utiliser les fonctions comme valeurs d'interfaces🎜🎜Maintenant que nous avons créé une interface Forme, nous pouvons utiliser des fonctions comme valeurs. Pour ce faire, nous définissons une fonction calculateArea qui accepte une valeur d'interface Shape en entrée. 🎜rrreee🎜Cas pratique🎜🎜Maintenant, créons un exemple pour démontrer comment le polymorphisme est implémenté. 🎜rrreee🎜Sortie : 🎜rrreee🎜Dans cet exemple, la fonction calculateArea utilise uniquement la méthode Area de l'interface Shape transmise, quel que soit le type réel Est-ce Rectangle ou Cercle. C'est l'incarnation du polymorphisme. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn