code: func (d *Database) Targets(dst interface{}, columns []string) ([]interface{}, error) {
  	data, err := getFields(reflect.TypeOf(dst))
  	if err != nil {
  		return nil, err
  	}
  
  	structVal := reflect.ValueOf(dst).Elem()
  
  	var targets []interface{}
  	for _, name := range columns {
  		if field, present := data.fields[name]; present {
  			fieldAddr := structVal.Field(field.index).Addr().Interface()
  			scanTarget, err := field.meddler.PreRead(fieldAddr)
  			if err != nil {
  				return nil, fmt.Errorf("meddler.Targets: PreRead error on column %s: %v", name, err)
  			}
  			targets = append(targets, scanTarget)
  		} else {
  			// no destination, so throw this away
  			targets = append(targets, new(interface{}))
  
  			if Debug {
  				log.Printf("meddler.Targets: column [%s] not found in struct", name)
  			}
  		}
  	}
  
  	return targets, nil
  }
docs: // Targets returns a list of values suitable for handing to a
  // Scan function in the sql package, complete with meddling. After
  // the Scan is performed, the same values should be handed to
  // WriteTargets to finalize the values and record them in the struct.