code: func (b *Backend) getStates(taskUUIDs ...string) ([]*tasks.TaskState, error) {
  	taskStates := make([]*tasks.TaskState, len(taskUUIDs))
  
  	conn := b.open()
  	defer conn.Close()
  
  	// conn.Do requires []interface{}... can't pass []string unfortunately
  	taskUUIDInterfaces := make([]interface{}, len(taskUUIDs))
  	for i, taskUUID := range taskUUIDs {
  		taskUUIDInterfaces[i] = interface{}(taskUUID)
  	}
  
  	reply, err := redis.Values(conn.Do("MGET", taskUUIDInterfaces...))
  	if err != nil {
  		return taskStates, err
  	}
  
  	for i, value := range reply {
  		stateBytes, ok := value.([]byte)
  		if !ok {
  			return taskStates, fmt.Errorf("Expected byte array, instead got: %v", value)
  		}
  
  		taskState := new(tasks.TaskState)
  		decoder := json.NewDecoder(bytes.NewReader(stateBytes))
  		decoder.UseNumber()
  		if err := decoder.Decode(taskState); err != nil {
  			log.ERROR.Print(err)
  			return taskStates, err
  		}
  
  		taskStates[i] = taskState
  	}
  
  	return taskStates, nil
  }
docs: // getStates returns multiple task states