Maison > développement back-end > Golang > Comment initialiser correctement un champ de carte dans une structure Go ?

Comment initialiser correctement un champ de carte dans une structure Go ?

Susan Sarandon
Libérer: 2024-12-02 05:36:10
original
401 Les gens l'ont consulté

How to Properly Initialize a Map Field in a Go Struct?

Initialisation d'un champ Struct de type Map dans Go

Lorsque vous travaillez avec des structures Go qui contiennent des champs de carte, il est crucial d'initialiser la carte avant l'utiliser. Une source courante de confusion survient lorsque l'on tente d'initialiser la carte lors de l'initialisation de la structure, comme le démontre l'extrait de code ci-dessous :

type Vertex struct {
   label string
} 

type Graph struct {
  connections map[Vertex][]Vertex
} 

func main() {
  v1 := Vertex{"v1"}
  v2 := Vertex{"v2"}

  g := new(Graph)
  g.connections[v1] = append(g.coonections[v1], v2) // panic: runtime error: assignment to entry in nil map
  g.connections[v2] = append(g.connections[v2], v1)
}
Copier après la connexion

Ce code déclenche une erreur d'exécution car g.connections est nul lors de l'instanciation de la structure, et il est interdit de tenter d'attribuer une carte nulle.

Il existe plusieurs approches pour résoudre ceci :

1. Créer une méthode constructeur :

Une solution consiste à utiliser une méthode constructeur, qui prend la responsabilité d'initialiser la carte lors de la création de la structure :

func NewGraph() *Graph {
    g := &Graph{}
    g.connections = make(map[Vertex][]Vertex)
    return g
}
Copier après la connexion

2. Ajouter une méthode de connexion :

Une autre approche consiste à utiliser une méthode "add_connection" qui vérifie si la carte est nulle et l'initialise si nécessaire avant d'effectuer l'opération souhaitée :

func (g *Graph) add_connection(v1, v2 Vertex) {
  if g.connections == nil {
    g.connections = make(map[Vertex][]Vertex)
  }
  g.connections[v1] = append(g.connections[v1], v2)
  g.connections[v2] = append(g.connections[v2], v1)
}
Copier après la connexion

3. Utilisez une valeur de champ non nulle :

Vous pouvez également attribuer une valeur non nulle au champ de la carte lors de l'initialisation de la structure :

type Graph struct {
  connections map[Vertex][]Vertex = make(map[Vertex][]Vertex)
}
Copier après la connexion

4. Utiliser la réflexion :

Pour les cas plus complexes, la réflexion peut être utilisée pour accéder et modifier le champ de la carte au moment de l'exécution. Cependant, cette approche est généralement moins idiomatique et doit être utilisée avec prudence.

Le choix de la méthode dépend des exigences spécifiques et des préférences de votre application. Les constructeurs et les méthodes add_connection sont couramment utilisés, offrant un moyen clair et simple d'initialiser et d'opérer sur des cartes au sein de structures.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal