ホームページ  >  記事  >  バックエンド開発  >  チャネルを使用して Go でオブザーバー パターンを実装するにはどうすればよいですか?

チャネルを使用して Go でオブザーバー パターンを実装するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-05 12:59:02263ブラウズ

How to Implement the Observer Pattern in Go Using Channels?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。