Go 言語のオブザーバー パターン
多くのプログラミング シナリオでは、イベントの発生時にオブジェクトが複数のサブスクライバーに通知する必要があるというニーズが生じます。このパターンは通常、オブザーバー パターンとして知られています。 Go では、チャネルは、このパターンを実装するための洗練されたソリューションを提供します。
以下のコード サンプルは、実際の例を示しています。
<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>
この例では、パブリッシャーはリスナー チャネルのスライスを保持します。これはサブスクライブされたオブジェクトを表します。 Pub メソッドは、データをチャネルに送信することですべてのリスナーに通知します。各サブスクライバは、処理する受信データを専用チャネルで継続的にリッスンします。
以上がGo チャネルを使用してオブザーバー パターンを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。