관찰자 패턴에는 특정 이벤트 발생 시 구독한 관찰자에게 알리는 게시자 개체가 포함됩니다. Go 언어는 채널을 사용하여 이 패턴을 구현하는 간단한 방법을 제공합니다.
이것이 어떻게 작동하는지 이해하기 위해 여러 개체가 게시자를 구독하는 시나리오를 고려해 보겠습니다. 그런 다음 게시자는 채널을 통해 모든 구독자에게 알림을 방송할 수 있습니다.
다음은 관찰자 패턴을 보여주는 샘플 Go 코드입니다.
package main import "fmt" // Publisher is an object that can notify subscribers of an event. type Publisher struct { listeners []chan string } // Subscriber represents an object that can receive notifications from a Publisher. type Subscriber struct { ID int Channel chan string } // Sub adds a Subscriber to the Publisher's list of listeners. func (p *Publisher) Sub(sub *Subscriber) { p.listeners = append(p.listeners, sub.Channel) } // Pub sends a notification to the Publisher's subscribers. func (p *Publisher) Pub(msg string) { for _, c := range p.listeners { c <- msg } } // Run starts a Subscriber listening for notifications from the Publisher. func (s *Subscriber) Run() { for { msg := <-s.Channel fmt.Printf("Subscriber %d received: %s\n", s.ID, msg) } } func main() { // Initialize Publisher publisher := &Publisher{} // Create and add Subscribers for i := 0; i < 3; i++ { subscriber := &Subscriber{ID: i, Channel: make(chan string)} publisher.Sub(subscriber) go subscriber.Run() } // Send notifications publisher.Pub("Hello 1") publisher.Pub("Hello 2") publisher.Pub("Hello 3") }
이 예에서 게시자(Publisher)에는 목록이 있습니다. 알림을 방송하는 채널(청취자)의 수입니다. 구독자(Subscriber)는 알림을 받을 수 있는 자신만의 채널(Channel)을 가지고 있습니다. 게시자가 알림(Pub)을 보내면 해당 채널을 통해 모든 구독자에게 알림이 전송됩니다. 그런 다음 각 구독자는 수신된 알림을 인쇄합니다. 이는 게시자가 관찰자에게 업데이트를 브로드캐스트하는 방법을 보여줍니다.
위 내용은 Go에서 관찰자 패턴을 구현하기 위해 채널을 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!