type Issue struct { SysId uuid.UUID `json:"sysid" maelstrom:"required"` } func (i *Issue) Unmarshal(data []byte) error { err := json.Unmarshal(data, i) if err != nil { slog.Error(err.Error()) return err } fields := reflect.ValueOf(i).Elem() for i := 0; i < fields.NumField(); i++ { maelstromTags := fields.Type().Field(i).Tag.Get("maelstrom") if strings.Contains(maelstromTags, "required") && fields.Field(i).IsZero() { return errors.New("Required field is missing." + fields.Field(i)) } } return nil }
In the above code, one line:
return errors.New("Required field is missing." + fields.Field(i))
I want to include the name of the current field in the error message.
This is the error I receive:
<code> invalid operation: "Required field is missing." + fields.Field(i) (mismatched types untyped string and reflect.Value) </code>
I also tried this:
return errors.New("Required field is missing." + fields.Field(i).String)
But I understand:
<code> invalid operation: "Required field is missing." + fields.Field(i).String (mismatched types untyped string and func() string) </code>
I also tried this:
return errors.New("Required field is missing." + string(fields.Field(i)))
But I understand:
<code> cannot convert fields.Field(i) (value of type reflect.Value) to type string [InvalidConversion] </code>
Can anyone point me in the right direction or provide a solution? Thanks!
Get StructField from the type. Get field name from StructField.
return fmt.Errorf("required field is missing: %s", fields.Type().Field(i).Name)
The above is the detailed content of Go Reflection Get current field name but error on untyped string with mismatched types. For more information, please follow other related articles on the PHP Chinese website!