Maison >développement back-end >Golang >Comment implémenter le modèle Singleton dans Go ?

Comment implémenter le modèle Singleton dans Go ?

DDD
DDDoriginal
2024-11-12 05:46:01879parcourir

How to Implement the Singleton Pattern in Go?

Implémentation du modèle Singleton dans Go

Dans le domaine de la programmation orientée objet, le modèle Singleton vise à imposer la création d'un seul instance d'une classe ou d'un type tout au long de la durée de vie du programme. Voici comment réaliser ce modèle dans Go :

Utilisation de variables privées et d'un constructeur public :

Cette approche utilise des variables privées et un constructeur public pour restreindre l'instanciation directe du singleton :

package singleton

type single struct {
    O interface{}
}

var instantiated *single = nil

func New() *single {
    if instantiated == nil {
        instantiated = new(single)
    }
    return instantiated
}

En rendant single et instancié private, vous pouvez vous assurer que seule la fonction New peut instancier le singleton.

Utilisation de sync.Once :

Pour la sécurité des threads, vous pouvez utiliser le type sync.Once pour garantir que le singleton n'est initialisé qu'une seule fois, même en mode simultané. environnements :

package singleton

import "sync"

type single struct {
    O interface{}
}

var instantiated *single
var once sync.Once

func New() *single {
    once.Do(func() {
        instantiated = &single{}
    })
    return instantiated
}

Considérations :

Bien que le modèle Singleton puisse être utile dans certains scénarios, il est important de considérer ses inconvénients potentiels et d'explorer des approches alternatives. Les packages dans Go agissent intrinsèquement comme des singletons, offrant une véritable encapsulation et une véritable gestion des ressources. Par conséquent, évaluez soigneusement si un modèle Singleton traditionnel est nécessaire avant de le mettre en œuvre.

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