Implémentation du modèle de conception Singleton dans Go
Le modèle de conception Singleton restreint l'instanciation d'une classe à un seul objet. Bien que son utilisation soit souvent débattue, dans certains scénarios, cela peut être une solution pratique.
Implémentation
Pour implémenter le modèle Singleton dans Go, nous commençons par ce qui suit code :
package singleton type single struct { O interface{}; } var instantiated *single = nil func New() *single { if instantiated == nil { instantiated = new(single); } return instantiated; }
Ici, une structure privée single définit l'objet que nous voulons limiter à une seule instance. La variable privée instanciée garde la trace de l'instanciation de l'objet. Nous définissons une fonction publique New() pour récupérer l'instance.
Thread Safety
Cependant, cette implémentation n'est pas thread-safe. Pour résoudre ce problème, nous pouvons utiliser le type sync.Once :
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 }
Ici, sync.Once garantit que le singleton n'est instancié qu'une seule fois, même dans des environnements simultanés.
Alternatives
Alternativement, il vaut la peine d'envisager la portée au niveau du package comme un moyen simple d'appliquer le singleton comportement.
En résumé, la mise en œuvre du modèle Singleton dans Go implique de contrôler la création d'instance via une seule fonction. La sécurité des threads peut être obtenue en utilisant sync.Once. Cependant, comme suggéré, il est sage de remettre en question la nécessité de singletons dans votre code pour garantir une conception bien structurée et maintenable.
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!