Maison >développement back-end >Golang >Comment initialiser correctement les cartes dans 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) }
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 }
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) }
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} }
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!