Home >Backend Development >Golang >Go Reflection Get current field name but error on untyped string with mismatched types

Go Reflection Get current field name but error on untyped string with mismatched types

WBOY
WBOYforward
2024-02-06 10:30:04658browse

Go Reflection 获取当前字段名称,但在类型不匹配的非类型字符串上出现错误

Question content

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!


Correct answer


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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete