Constructeur pour initialiser les membres de Go Struct
Les développeurs qui débutent sur Go rencontrent souvent des défis d'initialisation avec les structures. Considérez ce qui suit :
import "sync" type SyncMap struct { lock *sync.RWMutex hm map[string]string }
Instancier cette structure avec sm := new(SyncMap) provoque malheureusement une panique en raison de pointeurs nuls.
Surmonter les pointeurs nuls avec une fonction d'assistance
Pour éviter la panique, une approche alternative consiste à utiliser une fonction distincte pour initialisation :
func (m *SyncMap) Init() { m.hm = make(map[string]string) m.lock = new(sync.RWMutex) }
Après avoir instancié la structure, il faut alors appeler manuellement Init. Cela introduit le code passe-partout.
Présentation des constructeurs pour simplifier l'initialisation
Une solution plus élégante consiste à utiliser une fonction constructeur. Prenons cet exemple :
func NewSyncMap() *SyncMap { return &SyncMap{hm: make(map[string]string)} }
Cette fonction initialise les membres de la structure nécessaires et renvoie un pointeur vers la structure initialisée. L'utilisation est simple :
sm := NewSyncMap() sm.Put("Test", "Test")
Constructeurs améliorés pour les structures complexes
Pour les structures comportant plus de membres, les constructeurs peuvent être étendus pour gérer des tâches d'initialisation supplémentaires, telles que le démarrage de goroutines. ou en enregistrant les finaliseurs :
func NewSyncMap() *SyncMap { sm := SyncMap{ hm: make(map[string]string), foo: "Bar", } runtime.SetFinalizer(sm, (*SyncMap).stop) go sm.backend() return &sm }
En tirant parti des constructeurs, les développeurs Go peuvent simplifier l'initialisation des structures, éliminer code passe-partout, et améliorer la maintenabilité et la lisibilité de leur base de code.
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!