Maison > Article > développement back-end > Comment implémenter le modèle Observer dans Go à l'aide de canaux ?
Modèle Observer en langage Go
En génie logiciel, le modèle Observer est utilisé lorsqu'il est nécessaire de notifier un ensemble d'abonnés lorsqu'un événement se produit dans un objet. Un cadre commun pour y parvenir en C est boost::signaux. Cette question explore comment reproduire cette fonctionnalité dans Go, à l'aide d'un exemple qui montre comment plusieurs abonnés peuvent s'inscrire auprès d'un éditeur et recevoir des notifications.
Solution
Le modèle Observer peut être facilement implémenté dans Go à l’aide de canaux. Leur objectif inhérent est de faciliter la communication entre les goroutines concurrentes.
type Publisher struct { listeners []chan *Msg } type Subscriber struct { Channel chan *Msg } func (p *Publisher) Sub(c chan *Msg) { p.appendListener(c) } func (p *Publisher) Pub(m *Msg) { for _, c := range p.listeners { c <- Msg } } func (s *Subscriber) ListenOnChannel() { for { data := <-s.Channel //Process data } } func main() { for _, v := range subscribers { p.Sub(v.Channel) go v.ListenOnChannel() } //Some kind of wait here }
Bien que cet exemple ne soit pas un exemple de code fonctionnel complet, il fournit une base solide pour implémenter le modèle Observer dans Go à l'aide de canaux.
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!