在Go语言Observer模式

问题描述 投票:14回答:2

这个问题是很常见:当一些事件发生的对象应该通知其所有订户。在C ++中,我们可以使用boost::signals或别的东西。但如何做到这一点在Go语言吗?这将是很好看到一个连接对象订阅发布和流程通知一些工作的代码示例。

谢谢

go observer-pattern
2个回答
14
投票

这实际上是走得相当简单。使用渠道。这是什么样的,他们正在对做了的东西。

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
}

显然,这不完全是一个工作代码示例。但已经很接近了。


0
投票

还有去观察者(https://github.com/imkira/go-observer)。他们比较观察者与渠道。

© www.soinside.com 2019 - 2024. All rights reserved.