gitee.com/sasukebo/go-micro/v4@v4.7.1/registry/memory_watcher.go (about)

     1  package registry
     2  
     3  import (
     4  	"errors"
     5  )
     6  
     7  type memWatcher struct {
     8  	id   string
     9  	wo   WatchOptions
    10  	res  chan *Result
    11  	exit chan bool
    12  }
    13  
    14  func (m *memWatcher) Next() (*Result, error) {
    15  	for {
    16  		select {
    17  		case r := <-m.res:
    18  			if len(m.wo.Service) > 0 && m.wo.Service != r.Service.Name {
    19  				continue
    20  			}
    21  			return r, nil
    22  		case <-m.exit:
    23  			return nil, errors.New("watcher stopped")
    24  		}
    25  	}
    26  }
    27  
    28  func (m *memWatcher) Stop() {
    29  	select {
    30  	case <-m.exit:
    31  		return
    32  	default:
    33  		close(m.exit)
    34  	}
    35  }