code: func GetDeviceGatewayRXInfoSetForDevEUIs(p *redis.Pool, devEUIs []lorawan.EUI64) ([]DeviceGatewayRXInfoSet, error) {
  	if len(devEUIs) == 0 {
  		return nil, nil
  	}
  
  	var keys []interface{}
  	for _, d := range devEUIs {
  		keys = append(keys, fmt.Sprintf(deviceGatewayRXInfoSetKeyTempl, d))
  	}
  
  	c := p.Get()
  	defer c.Close()
  
  	bs, err := redis.ByteSlices(c.Do("MGET", keys...))
  	if err != nil {
  		return nil, errors.Wrap(err, "get byte slices error")
  	}
  
  	var out []DeviceGatewayRXInfoSet
  	for _, b := range bs {
  		if len(b) == 0 {
  			continue
  		}
  
  		var rxInfoSetPB DeviceGatewayRXInfoSetPB
  		if err = proto.Unmarshal(b, &rxInfoSetPB); err != nil {
  			log.WithError(err).Error("protobuf unmarshal error")
  			continue
  		}
  
  		out = append(out, deviceGatewayRXInfoSetFromPB(rxInfoSetPB))
  	}
  
  	return out, nil
  }
docs: // GetDeviceGatewayRXInfoSetForDevEUIs returns the DeviceGatewayRXInfoSet
  // objects for the given Device EUIs.