func (c etcdClient) GetServices(prefix string) ([]*Service, error) {
	ctx, cancel := context.WithTimeout(c.ctx, etcdTimeout)
	defer cancel()

	path := prefix
	r, err := c.client.Get(ctx, path, etcdcv3.WithPrefix())
	if err != nil {
		return nil, err
	}

	var svcs []*Service
	bx := make(map[Service]bool)
	for _, n := range r.Kvs {
		svc := new(Service)
		if err := json.Unmarshal(n.Value, svc); err != nil {
			return nil, fmt.Errorf("%s: %s", n.Key, err.Error())
		}
		b := Service{Host: svc.Host, Port: svc.Port, Priority: svc.Priority, Weight: svc.Weight, Text: svc.Text, Key: string(n.Key)}
		if _, ok := bx[b]; ok {
			// skip the service if already added to service list.
			// the same service might be found in multiple etcd nodes.
			continue
		}
		bx[b] = true

		svc.Key = string(n.Key)
		if svc.Priority == 0 {
			svc.Priority = priority
		}
		svcs = append(svcs, svc)
	}

	return svcs, nil
}
func (c etcdClient) GetServices(prefix string) ([]*Service, error) {
	ctx, cancel := context.WithTimeout(c.ctx, etcdTimeout)
	defer cancel()

	path := prefix
	r, err := c.client.Get(ctx, path, etcdcv3.WithPrefix())
	if err != nil {
		return nil, err
	}

	var svcs []*Service
	bx := make(map[Service]bool)
	for _, n := range r.Kvs {
		svc := new(Service)
		if err := json.Unmarshal(n.Value, svc); err != nil {
			return nil, fmt.Errorf("%s: %s", n.Key, err.Error())
		}
		b := Service{Host: svc.Host, Port: svc.Port, Priority: svc.Priority, Weight: svc.Weight, Text: svc.Text, Key: string(n.Key)}
		if _, ok := bx[b]; ok {
			
			
			continue
		}
		bx[b] = true

		svc.Key = string(n.Key)
		if svc.Priority == 0 {
			svc.Priority = priority
		}
		svcs = append(svcs, svc)
	}

	return svcs, nil
}
func ( c etcdClient ) GetServices ( prefix string ) ( [ ] * Service , error ) { ctx , cancel := context . WithTimeout ( c . ctx , etcdTimeout ) defer cancel ( ) path := prefix r , err := c . client . Get ( ctx , path , etcdcv3 . WithPrefix ( ) ) if err != nil { return nil , err } var svcs [ ] * Service bx := make ( map [ Service ] bool ) for _ , n := range r . Kvs { svc := new ( Service ) if err := json . Unmarshal ( n . Value , svc ) ; err != nil { return nil , fmt . Errorf ( " " , n . Key , err . Error ( ) ) } b := Service { Host : svc . Host , Port : svc . Port , Priority : svc . Priority , Weight : svc . Weight , Text : svc . Text , Key : string ( n . Key ) } if _ , ok := bx [ b ] ; ok { // skip the service if already added to service list. // the same service might be found in multiple etcd nodes. continue } bx [ b ] = true svc . Key = string ( n . Key ) if svc . Priority == 0 { svc . Priority = priority } svcs = append ( svcs , svc ) } return svcs , nil }
// GetService return all Service records stored in etcd stored anywhere under the given key (recursively)
GetService return all Service records stored in etcd stored anywhere under the given key ( recursively )