Go 言語のオブザーバー パターン
ソフトウェア エンジニアリングでは、イベント発生時にサブスクライバーのコレクションに通知する必要がある場合にオブザーバー パターンが使用されます。オブジェクト内で発生します。これを C で実現するための一般的なフレームワークは boost::signals です。この質問では、複数のサブスクライバーがパブリッシャーに登録して通知を受け取る方法を示す例を使用して、Go でこの機能を複製する方法を検討します。
解決策
オブザーバー パターンチャネルを使用して 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() { for _, v := range subscribers { p.Sub(v.Channel) go v.ListenOnChannel() } //Some kind of wait here }
この例は完全に動作するコード サンプルではありませんが、チャネルを使用して Go で Observer パターンを実装するための強固な基盤を提供します。
以上がチャネルを使用して Go でオブザーバー パターンを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。