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
DDDoriginal
2024-12-27 18:24:15412parcourir

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

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"]}}

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

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

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