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 중국어 웹사이트의 기타 관련 기사를 참조하세요!