Cnator: Go의 채널 기반 구독
6908 단어 eventdrivengoopensource
다음 공개 프로젝트에서 채널을 많이 사용합니다. 이러한 시나리오 중 하나는 이벤트 기반 접근 방식을 모델링하는 것입니다.
이 프로젝트를 개발하는 동안 설정이 거의 동일하다는 것을 알았고 이에 대한 Go 모듈을 만들기로 결정했습니다.
그것은
Cnator
이라고합니다 (발음 "c-nator")go get gitlab.com/altiano/cnator
3가지 방법이 있습니다.
New()
Subscribe(channel, subscriber)
Serve()
이렇게 사용할 수 있다는 것
cnator := cnator.New()
channels := createChannels()
// provide channel reference to each publisher
producerA := NewProducerA(channels.chanA)
producerB := NewProducerB(channels.chanB)
producerC := NewProducerC(channels.chanC)
// using cnator to subscribe to those channel events
subscriberA := subscriberA{}
subscriberB := subscriberB{}
subscriberC := subscriberC{}
cnator.Subscribe(channels.chanA, subscriberA.receiveChanA)
cnator.Subscribe(channels.chanB, subscriberB.receiveChanB)
cnator.Subscribe(channels.chanC, subscriberC.receiveChanC)
// start watching for events
cnator.Serve()
createChannel()
방금 채널을 초기화했지만 고유한 모델을 제공해야 합니다.func createChannels() channels {
return channels{
chanA: make(chan struct{}),
chanB: make(chan string),
chanC: make(chan Person),
}
}
구독자는 채널과 데이터 유형이 일치하는 콜백 함수일 뿐입니다.
func (s *subscriberA) receiveChanA() {
fmt.Println("Subscriber A receiving")
}
func (s *subscriberB) receiveChanB(data string) {
fmt.Println("Subscriber B receiving", data)
}
func (s *subscriberC) receiveChanC(data Person) {
fmt.Println("Subscriber C receiving", data)
}
빈 구조체를 수신하는
chanA
를 제외하고{},receiveChanA()
와 같은 매개변수를 무시할 수 있습니다.cnator.Serve()
의 작업은 cnator.Subscribe(..)
가 만든 각 구독에 대해 go 루틴을 생성하는 것입니다.다음과 같은 런타임 유효성 검사를 제공합니다.
make(chan ..)
를 잊어버림) 등전체 코드 및 예제는 이 저장소에서 찾을 수 있습니다. Cnator
또한 게시: https://blog.altiano.dev/cnator-channel-based-subscription-in-go
Reference
이 문제에 관하여(Cnator: Go의 채널 기반 구독), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/altiano/cnator-channel-based-subscriptions-in-go-4een텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)