package dadis import ( "context" "dashboard/pkg/observe" "fmt" "testing" "time" ) type baseObserver struct { name string conn chan interface{} } func newBaseObserver(name string) *baseObserver { res := &baseObserver{ name: name, conn: make(chan interface{}), } go res.getMsg() return res } func (b *baseObserver) getMsg() { for res := range b.conn { fmt.Println(b.name, res) } } func (b *baseObserver) OnChange(_ context.Context, e *observe.Event) error { b.conn <- e return nil } func Test_Dadis(t *testing.T) { obA := newBaseObserver("A") obB := newBaseObserver("B") obC := newBaseObserver("C") obD := newBaseObserver("D") topic := "async" dadis := NewDadis() dadis.Sub(topic, obA) dadis.Sub(topic, obB) dadis.Sub(topic, obC) dadis.Sub(topic, obD) go func() { for i := range 10 { i := i go func() { key := fmt.Sprintf("%s,%d", "nohao", i) dadis.Set(topic, key, 0) }() } }() go func() { for range 10 { go func() { fmt.Println(dadis.Get(topic)) }() } }() <-time.After(time.Second * 1) }