Heim > Backend-Entwicklung > Golang > Wie implementiert man das Beobachtermuster in Go mithilfe von Kanälen?

Wie implementiert man das Beobachtermuster in Go mithilfe von Kanälen?

Barbara Streisand
Freigeben: 2024-11-05 12:59:02
Original
387 Leute haben es durchsucht

How to Implement the Observer Pattern in Go Using Channels?

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage