Maison > développement back-end > Golang > Comment initialiser correctement les structures intégrées dans Go ?

Comment initialiser correctement les structures intégrées dans Go ?

DDD
Libérer: 2024-12-27 18:24:15
original
442 Les gens l'ont consulté

How to Properly Initialize Embedded Structs in Go?

Comment initialiser des structures intégrées dans Golang

Dans Go, il est possible de définir des structures au sein d'autres structures pour créer des structures de données imbriquées. Cependant, l'initialisation de ces structures imbriquées peut présenter un défi.

Considérons l'exemple suivant :

type DetailsFilter struct {
  Filter struct {
    Name    string        
    ID      int                           
  } 
}
Copier après la connexion

Pour initialiser la structure DetailsFilter avec une structure Filter intégrée, vous pouvez rencontrer une erreur si vous essayez pour attribuer une carte générique au champ Filtre.

var M map[string]interface{}
M = make(map[string]interface{})
M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5}
var detailsFilter = DetailsFilter{Filter: M["Filter"]}}
Copier après la connexion

L'erreur que vous recevrez est : "ne peut pas utiliser (type interface {}) comme tapez struct dans la valeur du champ : nécessite une assertion de type."

La raison de cette erreur est qu'un champ de structure anonyme, tel qu'utilisé ici pour le filtre, nécessite que le type exact soit spécifié lors de l'initialisation. Vous pouvez résoudre ce problème en définissant explicitement le type du champ Filtre dans la structure anonyme :

type DetailsFilter struct {
  Filter struct {
    Name    string        
    ID      int                           
  } 
}

df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
Copier après la connexion

Vous pouvez également choisir de ne pas utiliser de structure anonyme pour le filtre et lui donner plutôt un type nommé :

type Filter struct {
  Name    string
  ID      int
}

type DetailsFilter struct {
  Filter Filter
}

df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
Copier après la connexion

Les deux méthodes vous permettront d'initialiser la structure DetailsFilter avec la structure Filter imbriquée.

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