Maison >développement back-end >Golang >Comment les canaux Go peuvent-ils être utilisés pour implémenter le modèle Observer ?
Modèle d'observateur en langage Go
Dans de nombreux scénarios de programmation, un besoin se fait sentir lorsqu'un objet doit notifier plusieurs abonnés lors de l'occurrence d'un événement. Ce modèle est généralement connu sous le nom de modèle d'observateur. Dans Go, les chaînes constituent une solution élégante pour implémenter ce modèle.
L'exemple de code ci-dessous montre un exemple fonctionnel :
<code class="go">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() { publisher := &Publisher{} subscribers := []*Subscriber{ &Subscriber{make(chan *Msg)}, &Subscriber{make(chan *Msg)}, // Additional subscribers can be added here } for _, sub := range subscribers { publisher.Sub(sub.Channel) go sub.ListenOnChannel() } publisher.Pub(&Msg{"Event Notification"}) // Pause the main function to allow subscribers to process messages time.Sleep(time.Second) } type Msg struct { Message string }</code>
Dans cet exemple, l'éditeur détient une tranche de chaînes d'auditeurs, qui représentent les objets souscrits. La méthode Pub informe tous les auditeurs en envoyant des données à leurs chaînes. Chaque Abonné écoute en permanence sur son canal dédié les données entrantes à traiter.
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!