package Observer type ( Event struct { Content interface{} Response chan<- float32 } Monitor chan<- Event Target interface{ Add(monitor Monitor) Remove(monitor Monitor) bool } repeater []Monitor ) func (self *repeater) Add(m Monitor) { *self = append(*self, m) } func (self *repeater) Remove(m Monitor) bool { for i, which := range *self { if which == m { copy((*self)[i:], (*self)[i + 1:]) return true } } return false } func (self *repeater) repeat(source <-chan Event) { for e := range source { for _, m := range *self { m <- e } } } func NewTarget(source <-chan Event) Target { t := &repeater{} go t.repeat(source) return &t }