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