Observer-Muster in der Go-Sprache
In der Softwareentwicklung wird das Observer-Muster verwendet, wenn es erforderlich ist, eine Sammlung von Abonnenten über ein Ereignis zu benachrichtigen tritt innerhalb eines Objekts auf. Ein gängiges Framework, um dies in C zu erreichen, ist boost::signals. In dieser Frage wird untersucht, wie diese Funktionalität in Go repliziert werden kann, und zwar anhand eines Beispiels, das zeigt, wie sich mehrere Abonnenten bei einem Herausgeber registrieren und Benachrichtigungen erhalten können.
Lösung
Das Observer-Muster kann mithilfe von Kanälen einfach in Go implementiert werden. Ihr inhärenter Zweck besteht darin, die Kommunikation zwischen gleichzeitigen Goroutinen zu erleichtern.
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 }
Obwohl dieses Beispiel kein vollständig funktionierendes Codebeispiel ist, bietet es eine solide Grundlage für die Implementierung des Observer-Musters in Go mithilfe von Kanälen.
Das obige ist der detaillierte Inhalt vonWie implementiert man das Beobachtermuster in Go mithilfe von Kanälen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!