Maison > développement back-end > Golang > Explication détaillée de la façon dont Golang obtient l'effet d'héritage

Explication détaillée de la façon dont Golang obtient l'effet d'héritage

PHPz
Libérer: 2023-04-11 14:23:57
original
888 Les gens l'ont consulté

Dans le langage Go, il n'y a pas de notion de classe, il n'y a donc pas d'héritage dans les langages traditionnels orientés objet. Cependant, dans le langage Go, un effet de type héritage peut être obtenu grâce à la combinaison de structures et de champs anonymes.

Tout d’abord, jetons un coup d’œil à l’utilisation de la combinaison dans le langage go. La composition fait référence à l'intégration d'une structure dans une autre structure pour réaliser la réutilisation et la modularisation du code. Par exemple, nous pouvons définir une structure Personne :

type Person struct {
    Name string
    Age int
}
Copier après la connexion

Ensuite, nous pouvons intégrer la structure Personne dans la structure Étudiant :

type Student struct {
    Person
    School string
}
Copier après la connexion

De cette façon, la structure Étudiant a non seulement ses propres attributs, mais peut également transmettre l'attribut Personne pour accéder aux propriétés de la classe parent. Par exemple :

s := Student{
    Person: Person{Name: "Tom", Age: 18},
    School: "CMS",
}
fmt.Println(s.Name) // Tom
fmt.Println(s.Age)  // 18
Copier après la connexion

Vous pouvez également accéder aux méthodes de la classe parent via l'attribut Person intégré :

func (p *Person) SayHello() {
    fmt.Printf("Hello, my name is %s.\n", p.Name)
}

type Student struct {
    Person
    School string
}

func main() {
    s := Student{
        Person: Person{Name: "Tom", Age: 18},
        School: "CMS",
    }
    s.SayHello() // Hello, my name is Tom.
}
Copier après la connexion

Cependant, que se passe-t-il si nous voulons définir une méthode dans la structure Student avec le même nom que la structure Person ? A ce stade, vous devez utiliser les caractéristiques des champs anonymes.

Le champ anonyme est un type de champ spécial qui ne spécifie pas de nom, seulement un type. Grâce à des champs anonymes, les variables et méthodes portant le même nom dans la classe parent peuvent être référencées dans la sous-classe. Nous pouvons utiliser la méthode suivante pour définir une méthode du même nom que la structure Person dans la structure Student :

type Person struct {
    Name string
    Age int
}

func (p *Person) SayHello() {
    fmt.Printf("Hello, my name is %s.\n", p.Name)
}

type Student struct {
    Person
    School string
}

func (s *Student) SayHello() {
    fmt.Printf("Hello, my name is %s and I am a student of %s.\n", s.Name, s.School)
}

func main() {
    s := Student{
        Person: Person{Name: "Tom", Age: 18},
        School: "CMS",
    }
    s.SayHello() // Hello, my name is Tom and I am a student of CMS.
}
Copier après la connexion

Dans le code ci-dessus, nous définissons la méthode SayHello du même nom que la structure Person dans la structure Student, et passez s.Name et s.School pour accéder aux propriétés de la classe parent.

En résumé, le langage Go n'a pas de concept d'héritage, mais grâce à la combinaison de structures et de champs anonymes, des effets similaires à l'héritage peuvent être obtenus.

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 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