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

Comment utiliser les structures imbriquées dans Go ?

May 11, 2023 pm 04:39 PM
go 使用 嵌套结构

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
}
Copier après la connexion

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,
  },
}
Copier après la connexion

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”
Copier après la connexion

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”
Copier après la connexion

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”
Copier après la connexion

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”
Copier après la connexion

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Tutoriel BTCC : Comment lier et utiliser le portefeuille MetaMask sur l'échange BTCC ? Tutoriel BTCC : Comment lier et utiliser le portefeuille MetaMask sur l'échange BTCC ? Apr 26, 2024 am 09:40 AM

MetaMask (également appelé Little Fox Wallet en chinois) est un logiciel de portefeuille de cryptage gratuit et bien accueilli. Actuellement, BTCC prend en charge la liaison au portefeuille MetaMask. Après la liaison, vous pouvez utiliser le portefeuille MetaMask pour vous connecter rapidement, stocker de la valeur, acheter des pièces, etc., et vous pouvez également obtenir un bonus d'essai de 20 USDT pour la première liaison. Dans le didacticiel du portefeuille BTCCMetaMask, nous présenterons en détail comment enregistrer et utiliser MetaMask, ainsi que comment lier et utiliser le portefeuille Little Fox dans BTCC. Qu'est-ce que le portefeuille MetaMask ? Avec plus de 30 millions d’utilisateurs, MetaMask Little Fox Wallet est aujourd’hui l’un des portefeuilles de crypto-monnaie les plus populaires. Son utilisation est gratuite et peut être installée sur le réseau en tant qu'extension

Comment faire correspondre les horodatages à l'aide d'expressions régulières dans Go ? Comment faire correspondre les horodatages à l'aide d'expressions régulières dans Go ? Jun 02, 2024 am 09:00 AM

Dans Go, vous pouvez utiliser des expressions régulières pour faire correspondre les horodatages : compilez une chaîne d'expression régulière, telle que celle utilisée pour faire correspondre les horodatages ISO8601 : ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Utilisez la fonction regexp.MatchString pour vérifier si une chaîne correspond à une expression régulière.

Comment envoyer des messages Go WebSocket ? Comment envoyer des messages Go WebSocket ? Jun 03, 2024 pm 04:53 PM

Dans Go, les messages WebSocket peuvent être envoyés à l'aide du package gorilla/websocket. Étapes spécifiques : Établissez une connexion WebSocket. Envoyer un message texte : appelez WriteMessage(websocket.TextMessage,[]byte("message")). Envoyez un message binaire : appelez WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}).

La différence entre la langue Golang et Go La différence entre la langue Golang et Go May 31, 2024 pm 08:10 PM

Go et le langage Go sont des entités différentes avec des caractéristiques différentes. Go (également connu sous le nom de Golang) est connu pour sa concurrence, sa vitesse de compilation rapide, sa gestion de la mémoire et ses avantages multiplateformes. Les inconvénients du langage Go incluent un écosystème moins riche que les autres langages, une syntaxe plus stricte et un manque de typage dynamique.

Comment éviter les fuites de mémoire dans l'optimisation des performances techniques de Golang ? Comment éviter les fuites de mémoire dans l'optimisation des performances techniques de Golang ? Jun 04, 2024 pm 12:27 PM

Les fuites de mémoire peuvent entraîner une augmentation continue de la mémoire du programme Go en : fermant les ressources qui ne sont plus utilisées, telles que les fichiers, les connexions réseau et les connexions à la base de données. Utilisez des références faibles pour éviter les fuites de mémoire et ciblez les objets pour le garbage collection lorsqu'ils ne sont plus fortement référencés. En utilisant go coroutine, la mémoire de la pile de coroutines sera automatiquement libérée à la sortie pour éviter les fuites de mémoire.

Qu'est-ce que Bitget Launchpool ? Comment utiliser Bitget Launchpool ? Qu'est-ce que Bitget Launchpool ? Comment utiliser Bitget Launchpool ? Jun 07, 2024 pm 12:06 PM

BitgetLaunchpool est une plateforme dynamique conçue pour tous les passionnés de cryptomonnaie. BitgetLaunchpool se démarque par son produit unique. Ici, vous pouvez miser vos jetons pour débloquer plus de récompenses, notamment des parachutages, des rendements élevés et une généreuse cagnotte exclusive aux premiers participants. Qu’est-ce que BitgetLaunchpool ? BitgetLaunchpool est une plate-forme de crypto-monnaie où les jetons peuvent être mis en jeu et gagnés selon des termes et conditions conviviaux. En investissant du BGB ou d'autres jetons dans Launchpool, les utilisateurs ont la possibilité de recevoir des airdrops gratuits, des gains et de participer à de généreux pools de bonus. Les revenus des actifs gagés sont calculés en T+1 heures, et les récompenses sont basées sur

Comment utiliser le wrapper d'erreur de Golang ? Comment utiliser le wrapper d'erreur de Golang ? Jun 03, 2024 pm 04:08 PM

Dans Golang, les wrappers d'erreurs vous permettent de créer de nouvelles erreurs en ajoutant des informations contextuelles à l'erreur d'origine. Cela peut être utilisé pour unifier les types d'erreurs générées par différentes bibliothèques ou composants, simplifiant ainsi le débogage et la gestion des erreurs. Les étapes sont les suivantes : Utilisez la fonction error.Wrap pour envelopper les erreurs d'origine dans de nouvelles erreurs. La nouvelle erreur contient des informations contextuelles de l'erreur d'origine. Utilisez fmt.Printf pour générer des erreurs encapsulées, offrant ainsi plus de contexte et de possibilités d'action. Lors de la gestion de différents types d’erreurs, utilisez la fonction erreurs.Wrap pour unifier les types d’erreurs.

Un guide pour les tests unitaires des fonctions simultanées Go Un guide pour les tests unitaires des fonctions simultanées Go May 03, 2024 am 10:54 AM

Les tests unitaires des fonctions simultanées sont essentiels car cela permet de garantir leur comportement correct dans un environnement simultané. Des principes fondamentaux tels que l'exclusion mutuelle, la synchronisation et l'isolement doivent être pris en compte lors du test de fonctions concurrentes. Les fonctions simultanées peuvent être testées unitairement en simulant, en testant les conditions de concurrence et en vérifiant les résultats.

See all articles