Maison > Article > développement back-end > Explication détaillée de la façon dont Golang obtient l'effet d'héritage
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 }
Ensuite, nous pouvons intégrer la structure Personne dans la structure Étudiant :
type Student struct { Person School string }
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
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. }
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. }
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!