Maison  >  Article  >  développement back-end  >  Quelles sont les méthodes d'implémentation du modèle singleton dans Golang ?

Quelles sont les méthodes d'implémentation du modèle singleton dans Golang ?

PHPz
PHPzoriginal
2024-03-05 17:45:03577parcourir

Quelles sont les méthodes dimplémentation du modèle singleton dans Golang ?

Il existe trois façons d'implémenter le mode singleton dans Golang : le mode paresseux, le mode affamé et le mode double vérification. Ensuite, nous présenterons en détail ces trois méthodes d’implémentation et fournirons des exemples de code spécifiques.

1. Mode paresseux

Le mode paresseux signifie créer une instance singleton uniquement lorsqu'elle est appelée pour la première fois. Voici un exemple de code du mode paresseux :

package singleton

import (
    "sync"
)

type Singleton struct {
}

var instance *Singleton
var once sync.Once

func GetInstance() *Singleton {
    once.Do(func() {
        instance = &Singleton{}
    })
    return instance
}

Dans ce code, la fonction GetInstance transmet le package de synchronisation. . La structure Once garantit qu'une instance n'est créée que lors du premier appel. Lors de la mise en œuvre du mode paresseux, vous devez faire attention à la sécurité de la concurrence.

2. Mode Hungry Man

Le mode Hungry Man signifie créer une instance singleton au démarrage du programme. Voici un exemple de code du mode Hungry Man :

package singleton

type Singleton struct {
}

var instance *Singleton = &Singleton{}

func GetInstance() *Singleton {
    return instance
}

Dans ce code, l'instance est créée lorsque le programme démarre la création. Puisque la fonction init du langage Go est automatiquement appelée lors de l'importation du package, le mode faim peut être réalisé.

3. Verrouillage à double vérification

Le mode à double vérification est un moyen d'optimiser en fonction du mode paresseux et réalise le singleton du mode paresseux grâce à une double vérification. Voici un exemple de code du mode double vérification :

package singleton

import "sync"

type Singleton struct {
}

var instance *Singleton
var mu sync.Mutex

func GetInstance() *Singleton {
    if instance == nil {
        mu.Lock()
        defer mu.Unlock()
        if instance == nil {
            instance = &Singleton{}
        }
    }
    return instance
}

Dans ce code, sync.Mutex est utilisé pour garantir la sécurité de la concurrence, et la double vérification est utilisée pour implémenter le mode singleton en mode paresseux.

Ci-dessus sont les trois méthodes d'implémentation du mode singleton dans Golang : le mode paresseux, le mode affamé et le mode double vérification. Choisissez une méthode d'implémentation appropriée pour implémenter le modèle singleton en fonction des besoins réels et des exigences de performances.

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