Maison >développement back-end >Golang >Comment dois-je initialiser les champs de carte dans Go Structs ?

Comment dois-je initialiser les champs de carte dans Go Structs ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 14:22:11270parcourir

How Should I Initialize Map Fields in Go Structs?

Bonnes pratiques pour initialiser les champs de carte dans les structures Go

Dans Go, il est courant de définir des structures qui contiennent des champs de carte. Cependant, comprendre la bonne approche pour initialiser ces cartes peut prêter à confusion. Cet article explore diverses méthodes d'initialisation des champs de carte dans les structures dans Go, en traitant des limitations de chaque option.

Le problème

Initialement introduit dans un exemple de code, en essayant de initialiser un champ de carte dans une structure sans initialisation appropriée peut entraîner une erreur d'exécution en raison de l'affectation à des cartes nulles. Une solution suggérée était de créer un constructeur, bien que cette approche présente des inconvénients.

Solution 1 : Constructeurs

Un constructeur est une fonction qui initialise et renvoie une nouvelle instance d'une structure. Il fournit un moyen centralisé et contrôlé de configurer l'état initial de la structure, y compris l'initialisation des cartes.

func NewGraph() *Graph {
    var g Graph
    g.connections = make(map[Vertex][]Vertex)
    return &g
}

Solution 2 : ajouter une méthode de connexion

Une autre option consiste à utiliser une méthode de connexion supplémentaire qui vérifie si la carte est initialisée et l'initialise si nécessaire. Cette approche permet plus de flexibilité et peut être utile dans les cas où vous souhaiterez peut-être ajouter des connexions au graphique de manière dynamique.

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

Autres options

Initialisation explicite

Au lieu d'utiliser un constructeur ou d'ajouter une méthode de connexion, vous pouvez initialiser explicitement la carte dans la structure. Cela nécessite de l'attribuer à make(map[keyType]valueType) lors de l'initialisation.

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

func main() {
    g := Graph{connections: make(map[Vertex][]Vertex)}
    // ...
}

Choisir la bonne approche

La meilleure approche pour initialiser les champs de carte dans Go les structures dépendent des exigences spécifiques de votre code. Si vous avez besoin d’un processus d’initialisation clair et contrôlé, les constructeurs peuvent constituer un choix approprié. Pour les cas où vous souhaitez plus de flexibilité ou un comportement dynamique, la méthode d'ajout de connexion peut être appropriée. L'initialisation explicite offre une alternative directe et concise mais nécessite une affectation explicite.

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