code: func FieldPtr(v reflect.Value, fieldName string, dest interface{}) error {
  	field := v.FieldByName(fieldName)
  	if !field.IsValid() {
  		return fmt.Errorf("couldn't find %v field in %T", fieldName, v.Interface())
  	}
  	v, err := conversion.EnforcePtr(dest)
  	if err != nil {
  		return err
  	}
  	field = field.Addr()
  	if field.Type().AssignableTo(v.Type()) {
  		v.Set(field)
  		return nil
  	}
  	if field.Type().ConvertibleTo(v.Type()) {
  		v.Set(field.Convert(v.Type()))
  		return nil
  	}
  	return fmt.Errorf("couldn't assign/convert %v to %v", field.Type(), v.Type())
  }
docs: // FieldPtr puts the address of fieldName, which must be a member of v,
  // into dest, which must be an address of a variable to which this field's
  // address can be assigned.