Sta*_*tas 15 go observer-pattern
此问题非常常见:对象应在发生某些事件时通知其所有订户.在C++中我们可以使用boost::signals或其他东西.但是如何用Go语言做到这一点?很高兴看到一些工作代码示例,其中有几个对象订阅了发布者并处理了通知.
谢谢
cth*_*m06 14
这在Go中实际上非常简单.使用频道.这是他们为之做的事情.
type Publish 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
}
Run Code Online (Sandbox Code Playgroud)
显然,这不是一个正常工作的代码示例.但它很接近.
| 归档时间: |
|
| 查看次数: |
4831 次 |
| 最近记录: |