Maison > développement back-end > Golang > Comment implémenter le modèle Observer dans Go à l'aide de canaux ?

Comment implémenter le modèle Observer dans Go à l'aide de canaux ?

Barbara Streisand
Libérer: 2024-11-05 12:59:02
original
386 Les gens l'ont consulté

How to Implement the Observer Pattern in Go Using Channels?

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

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!

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