Modèle de constructeur pour l'initialisation de structure dans Go
Lorsque vous travaillez avec des structures Golang, l'initialisation des membres peut parfois être un peu délicate, en particulier pour les nouveaux arrivants. Un problème courant est la panique du pointeur nul lors de l'accès à des champs non initialisés.
Pour résoudre ce problème, une approche populaire consiste à utiliser une fonction distincte pour l'initialisation. Dans votre exemple avec SyncMap, vous avez dû créer une fonction Init() pour initialiser manuellement les champs hm et verrouiller après avoir créé la structure à l'aide de new.
Cependant, il existe une manière plus élégante de gérer l'initialisation de la structure dans Go : en utilisant un constructeur. Un constructeur est une fonction qui prend les paramètres nécessaires pour créer une instance d'une structure et initialise tous ses membres.
Pour votre exemple SyncMap, vous pouvez définir un constructeur comme ceci :
func NewSyncMap() *SyncMap { return &SyncMap{hm: make(map[string]string)} }
Ce constructeur crée une nouvelle structure SyncMap, initialise le champ hm sur une carte vide et renvoie un pointeur vers le struct.
Maintenant, vous pouvez simplement utiliser NewSyncMap() pour créer des instances SyncMap initialisées, sans avoir besoin d'une initialisation manuelle :
sm := NewSyncMap() sm.Put("Test", "Test")
Ce modèle de constructeur peut être étendu pour gérer des instances plus complexes. scénarios d'initialisation, tels que le démarrage de goroutines en arrière-plan ou l'enregistrement de finaliseurs :
func NewSyncMap() *SyncMap { sm := SyncMap{ hm: make(map[string]string), foo: "Bar", } runtime.SetFinalizer(sm, (*SyncMap).stop) go sm.backend() return &sm }
En utilisant des constructeurs, vous pouvez vous assurer que votre Les structures Go sont toujours correctement initialisées et prêtes à être utilisées, sans avoir besoin de code passe-partout supplémentaire ni risque de rencontrer des paniques de pointeur nul.
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!