Maison > développement back-end > Golang > Comment les constructeurs peuvent-ils simplifier l'initialisation de Go Struct et éviter les paniques du pointeur Nil ?

Comment les constructeurs peuvent-ils simplifier l'initialisation de Go Struct et éviter les paniques du pointeur Nil ?

Patricia Arquette
Libérer: 2024-12-08 11:02:11
original
441 Les gens l'ont consulté

How Can Constructors Simplify Go Struct Initialization and Avoid Nil Pointer Panics?

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
}
Copier après la connexion

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)
}
Copier après la connexion

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)}
}
Copier après la connexion

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")
Copier après la connexion

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
}
Copier après la connexion

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!

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