Maison  >  Article  >  développement back-end  >  Comment utiliser les structures imbriquées dans Go ?

Comment utiliser les structures imbriquées dans Go ?

WBOY
WBOYoriginal
2023-05-11 16:39:063338parcourir

Dans le langage Go, les structures imbriquées sont une technique très courante. En intégrant une structure dans une autre, nous pouvons diviser un modèle de données complexe en parties plus petites, ce qui le rend plus facile à comprendre et à maintenir. Cet article présentera comment utiliser les structures imbriquées dans Go et quelques bonnes pratiques.

1. Définir des structures imbriquées

Tout d'abord, nous devons définir une structure qui contient des structures imbriquées. Le code suivant montre comment définir une structure Company qui contient une structure Person :

type Person struct {
  Name string
  Age int
}

type Company struct {
  Name string
  Address string
  CEO Person
}

Dans cet exemple, nous créons une structure Person pour représenter le PDG de chaque entreprise, puis nous l'intégrons dans la structure Company . De cette façon, nous pouvons accéder aux domaines du PDG comme une structure normale.

2. Initialiser la structure imbriquée

Ensuite, nous devons initialiser la structure imbriquée. Nous pouvons utiliser des littéraux de structure pour initialiser des structures imbriquées. Le code est le suivant :

company := Company{
  Name: "ABC Inc.",
  Address: "123 Main St.",
  CEO: Person{
    Name: "John Smith",
    Age: 45,
  },
}

Dans cet exemple, nous initialisons une structure Company via un littéral. Notez que nous utilisons le littéral de structure Person dans le champ CEO pour l’initialiser.

3. Accéder aux champs des structures imbriquées

Nous avons maintenant défini et initialisé la structure imbriquée. Nous pouvons accéder aux champs des structures imbriquées tout comme les structures ordinaires. Voici comment accéder aux champs Nom et Âge du PDG :

fmt.Println(company.CEO.Name) // 输出 “John Smith”
fmt.Println(company.CEO.Age) // 输出 “45”

Dans cet exemple, nous utilisons l'opérateur point pour accéder aux champs Nom et Âge dans la structure du PDG. C'est comme accéder à une structure normale.

4. Héritage et écrasement

Dans certains scénarios, nous pouvons avoir besoin d'hériter et de remplacer des structures imbriquées.

Héritage

Si deux structures d'une structure imbriquée ont les mêmes champs, la structure imbriquée écrasera les champs de la structure intégrée. Si la structure imbriquée contient des champs supplémentaires, ils seront ajoutés à la structure intégrée. Voici un exemple :

type Animal struct {
  Name string
  Age int
}

type Bird struct {
  Animal // 继承Animal结构体
  CanFly bool
}

bird := Bird{
  Animal: Animal{
    Name: "Polly",
    Age: 2,
  },
  CanFly: true,
}

fmt.Println(bird.Name) // 输出 “Polly”
fmt.Println(bird.Age) // 输出 “2”
fmt.Println(bird.CanFly) // 输出 “true”

Dans cet exemple, la structure Bird embarque la structure Animal, nous pouvons donc accéder aux champs de la structure Animal tout comme nous accédons à la structure Bird. Lors de l’initialisation de la structure Bird, nous l’initialisons en utilisant le littéral de structure Animal. Puisque la structure Bird hérite de la structure Animal, elle peut naturellement hériter des champs nom et âge de la structure Animal.

Override

Si vous devez remplacer certains champs ou méthodes dans une structure imbriquée, nous pouvons surcharger de la même manière qu'une structure normale. Voici un exemple :

type Person struct {
  Name string
  Age int
}

type Employee struct {
  Person // 继承Person结构体
  EmployeeID string
}

func (p Person) Greet() {
  fmt.Println("Hello")
}

func (e Employee) Greet() {
  fmt.Println("Hi, I'm an employee")
}

employee := Employee{
  Person: Person{
    Name: "John Smith",
    Age: 35,
  },
  EmployeeID: "12345",
}

employee.Person.Greet() // 输出 “Hello”
employee.Greet() // 输出 “Hi, I'm an employee”

Dans cet exemple, nous définissons une structure Personne et une structure Employé. La structure Employé hérite de la structure Personne. Nous avons défini une méthode Greet dans la structure Person, qui affiche "Bonjour". Dans la structure Employee, nous avons surchargé la méthode Greet, qui affiche "Bonjour, je suis un employé". Après avoir initialisé la variable Employee à l'aide de la structure Employee, nous pouvons appeler la méthode Greet de la structure Person pour imprimer "Bonjour", ou appeler la méthode Greet de la structure Employee pour imprimer "Bonjour, je suis un employé".

5. Interfaces et pointeurs imbriqués

Lors de l'utilisation de structures imbriquées, nous pouvons également imbriquer des interfaces et des pointeurs. Voici un exemple :

type Talker interface {
  Talk()
}

type Person struct {
  Name string
  Age int
}

func (p *Person) Talk() {
  fmt.Println("Hi, I'm " + p.Name)
}

type Employee struct {
  *Person // 嵌套指针类型
  EmployeeID string
  Role string
}

func (e *Employee) Talk() {
  fmt.Println("Hi, I'm" + e.Name + ", and I work as a " + e.Role)
}

employee := Employee{
  Person: &Person{
    Name: "John Smith",
    Age: 35,
  },
  EmployeeID: "12345",
  Role: "software engineer",
}

var talker Talker // 声明一个接口类型的变量
talker = &employee // 将employee赋值给talker

talker.Talk() // 输出 “Hi, I'm John Smith, and I work as a software engineer”

Dans cet exemple, nous définissons une interface Talker, qui possède une méthode Talk. Nous avons défini une structure Personne et une structure Employé, qui implémentent toutes deux l'interface Talker. La structure Employee contient un pointeur Person imbriqué, nous pouvons donc utiliser la méthode Talk de la structure Person. Après avoir initialisé la variable employé, nous l'attribuons à une variable de type interface Talker, afin de pouvoir utiliser la méthode de type interface pour accéder à la variable employé.

6. Conclusion

En langage Go, la structure imbriquée est une technique très utile qui permet de décomposer des modèles de données complexes en parties plus petites. Lors de l'utilisation de structures imbriquées, nous devons prêter attention à l'utilisation de l'héritage et du remplacement, ainsi qu'à l'utilisation d'interfaces et de pointeurs imbriqués. En maîtrisant ces technologies, nous pouvons mieux développer et maintenir des projets en langage Go.

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