code: func (d *Database) WriteTargets(dst interface{}, columns []string, targets []interface{}) error {
  	if len(columns) != len(targets) {
  		return fmt.Errorf("meddler.WriteTargets: mismatch in number of columns (%d) and targets (%d)",
  			len(columns), len(targets))
  	}
  
  	data, err := getFields(reflect.TypeOf(dst))
  	if err != nil {
  		return err
  	}
  	structVal := reflect.ValueOf(dst).Elem()
  
  	for i, name := range columns {
  		if field, present := data.fields[name]; present {
  			fieldAddr := structVal.Field(field.index).Addr().Interface()
  			err := field.meddler.PostRead(fieldAddr, targets[i])
  			if err != nil {
  				return fmt.Errorf("meddler.WriteTargets: PostRead error on column [%s]: %v", name, err)
  			}
  		} else {
  			// not destination, so throw this away
  			if Debug {
  				log.Printf("meddler.WriteTargets: column [%s] not found in struct", name)
  			}
  		}
  	}
  
  	return nil
  }
docs: // WriteTargets post-processes values with meddlers after a Scan from the
  // sql package has been performed. The list of targets is normally produced
  // by Targets.