Maison > développement back-end > Golang > Comment initialiser correctement les cartes dans Go Structs ?

Comment initialiser correctement les cartes dans Go Structs ?

DDD
Libérer: 2024-12-09 22:12:28
original
955 Les gens l'ont consulté

How to Properly Initialize Maps within Go Structs?

Initialiser des cartes dans Go Structs

L'initialisation d'une carte dans une structure peut être une tâche déroutante. Cet article explore différentes approches pour résoudre ce problème.

Problème : erreur d'exécution

Lors de la tentative d'initialisation d'une carte dans une structure, l'exécution du code suivant peut provoquer une erreur d'exécution. error:

package main

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)
  g.connections[v2] = append(g.connections[v2], v1)
}
Copier après la connexion

Cette erreur se produit car la carte des connexions est nulle lors de la tentative d'accès à son valeurs.

Solution : Constructeur

Une solution recommandée consiste à créer une fonction constructeur, comme démontré ci-dessous :

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

Cette fonction renvoie un nouvelle instance Graph avec une carte de connexions initialisée.

Solution : add_connection Méthode

Une autre option consiste à implémenter une méthode add_connection qui initialise la carte si elle est vide :

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

Cette méthode vérifie si la carte est nulle et l'initialise si nécessaire avant d'ajouter des connexions .

Exemple de la bibliothèque standard

La bibliothèque standard fournit un exemple d'initialisation d'une structure avec une tranche à l'aide d'un constructeur dans le package image/jpeg :

type Alpha struct {
    Pix []uint8
    Stride int
    Rect Rectangle
}

func NewAlpha(r Rectangle) *Alpha {
    w, h := r.Dx(), r.Dy()
    pix := make([]uint8, 1*w*h)
    return &Alpha{pix, 1 * w, r}
}
Copier après la connexion

Dans l'ensemble, le choix de la méthode d'initialisation dépend du cas d'utilisation spécifique. Les constructeurs offrent un moyen pratique de garantir une initialisation correcte, tandis que les méthodes permettent plus de flexibilité dans la gestion des cas exceptionnels.

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