code: func (cg *Consumergroup) WatchInstances() (ConsumergroupInstanceList, <-chan zk.Event, error) {
  	node := fmt.Sprintf("%s/consumers/%s/ids", cg.kz.conf.Chroot, cg.Name)
  	cgis, _, c, err := cg.kz.conn.ChildrenW(node)
  	if err != nil {
  		if err != zk.ErrNoNode {
  			return nil, nil, err
  		}
  		if err := cg.kz.mkdirRecursive(node); err != nil {
  			return nil, nil, err
  		}
  		if cgis, _, c, err = cg.kz.conn.ChildrenW(node); err != nil {
  			return nil, nil, err
  		}
  	}
  
  	result := make(ConsumergroupInstanceList, 0, len(cgis))
  	for _, cgi := range cgis {
  		result = append(result, cg.Instance(cgi))
  	}
  
  	return result, c, nil
  }
docs: // WatchInstances returns a ConsumergroupInstanceList, and a channel that will be closed
  // as soon the instance list changes.