Maison > développement back-end > Golang > le corps du texte

La mise en œuvre et les principes sous-jacents du polymorphisme et de l'encapsulation des fonctions Golang

WBOY
Libérer: 2023-05-16 08:39:23
original
1536 Les gens l'ont consulté

Le polymorphisme et l'encapsulation des fonctions Golang sont des fonctionnalités importantes de programmation orientée objet dans Golang. Dans Golang, le polymorphisme des fonctions et l'encapsulation peuvent être obtenus grâce à l'imbrication anonyme de types et de structures d'interface. Ensuite, cet article analysera la mise en œuvre et les principes sous-jacents du polymorphisme et de l'encapsulation des fonctions Golang.

1. Implémentation du polymorphisme

  1. Les types d'interface implémentent le polymorphisme

Dans Golang, le polymorphisme des fonctions peut être obtenu via les types d'interface. Un type d'interface est en fait une collection de signatures de méthode. Lorsqu'un type implémente toutes les méthodes de l'interface, une instance du type peut être affectée à une variable du type d'interface. Cette approche est similaire aux interfaces ou aux classes abstraites dans d'autres langages. Voici un exemple :

type Animal interface {
    Speak() string
}

type Dog struct {}

func (d Dog) Speak() string {
    return "Woof!"
}

type Cat struct {}

func (c Cat) Speak() string {
    return "Meow!"
}

func main() {
    var a Animal
    a = Dog{}
    fmt.Println(a.Speak()) // 输出 "Woof!"
    a = Cat{}
    fmt.Println(a.Speak()) // 输出 "Meow!"
}
Copier après la connexion

Dans l'exemple ci-dessus, le polymorphisme est implémenté via des types d'interface. Une variable de type Animal a est définie dans la fonction principale, qui peut pointer vers des instances de type Chien et Chat qui implémentent l'interface Animal. Lorsque la variable a pointe vers l'instance Dog, la sortie est "Woof!", et lorsqu'elle pointe vers l'instance Cat, la sortie est "Meow!".

  1. Le type d'interface vide implémente le conteneur universel

Le Le type d'interface vide dans Golang (interface{ }) peut accepter des valeurs de n'importe quel type, car le type d'interface vide ne contient aucune méthode, donc n'importe quelle instance de type peut être affectée à une variable du type d'interface vide. Voici un exemple :

func PrintType(v interface{}) {
    fmt.Printf("Value: %v, Type: %T
", v, v)
}

func main() {
    PrintType(42)    // 输出 "Value: 42, Type: int"
    PrintType("Hello, World!")    // 输出 "Value: Hello, World!, Type: string"
    PrintType(0.618)    // 输出 "Value: 0.618, Type: float64"
}
Copier après la connexion

Dans l'exemple ci-dessus, un conteneur universel est implémenté via un type d'interface vide. Une fonction PrintType est définie, qui accepte une valeur de n'importe quel type comme paramètre et imprime la valeur et le type auquel la valeur appartient. Si la fonction PrintType est appelée avec des instances de types différents dans la fonction principale, l'instance et son type peuvent être générés normalement.

2. La mise en œuvre et les principes sous-jacents de l'encapsulation

Dans Golang, les caractéristiques de l'encapsulation sont réalisées grâce à l'imbrication anonyme de structures. L'imbrication de structures est similaire à l'héritage. Une structure peut imbriquer une autre structure, encapsulant ainsi les variables et méthodes membres dans la structure. Voici un exemple :

type Person struct {
    Name string
    Age int
}

type Employee struct {
    Person
    Salary int
}

func main() {
    e := Employee{Person{"Alice", 26}, 3000}
    fmt.Printf("%v, Salary: %d
", e.Person, e.Salary)
    fmt.Printf("Name: %s, Age: %d, Salary: %d
", e.Name, e.Age, e.Salary)
}
Copier après la connexion

Dans l'exemple ci-dessus, la fonctionnalité d'encapsulation est réalisée grâce à une imbrication anonyme de structures. Une structure Personne est définie, qui contient deux variables membres : Nom et Âge, et une structure Employé, qui contient la structure Personne et la variable membre Salaire. Une instance Employee e est définie dans la fonction principale, qui contient les variables de membre Structure personne et Salaire. Les variables membres de l'instance e sont accessibles respectivement via e.Name, e.Age et e.Salary.

Le principe sous-jacent de l'imbrication de structure est le suivant : lorsqu'une structure imbrique une autre structure, les variables et méthodes membres de la structure imbriquée deviendront les variables et méthodes membres de la structure externe. Par conséquent, la structure externe peut accéder directement aux variables et méthodes membres de la structure imbriquée, ou elle peut accéder aux variables et méthodes membres de la structure imbriquée via le nom de type de la structure imbriquée.

3. Résumé

Le polymorphisme et l'encapsulation des fonctions de Golang sont obtenus grâce à l'imbrication anonyme de types et de structures d'interface. Les types d'interface peuvent réaliser un polymorphisme, et les types d'interface vides peuvent réaliser des conteneurs universels ; l'imbrication anonyme de structures peut réaliser l'encapsulation, et l'encapsulation et la protection des informations peuvent être réalisées grâce à l'imbrication de variables et de méthodes membres. Grâce à l'analyse de la mise en œuvre du polymorphisme et de l'encapsulation des fonctions Golang et des principes sous-jacents, nous pouvons mieux comprendre les caractéristiques de programmation orientée objet du langage Golang.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal