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
Release: 2024-02-06 10:30:04
forward
673 people have browsed it

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
}
Copy after login

In the above code, one line:

return errors.New("Required field is missing." + fields.Field(i))
Copy after login

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>
Copy after login

I also tried this:

return errors.New("Required field is missing." + fields.Field(i).String)
Copy after login

But I understand:

<code>
invalid operation: "Required field is missing." + fields.Field(i).String (mismatched types untyped string and func() string)
</code>
Copy after login

I also tried this:

return errors.New("Required field is missing." + string(fields.Field(i)))
Copy after login

But I understand:

<code>
cannot convert fields.Field(i) (value of type reflect.Value) to type string [InvalidConversion]
</code>
Copy after login

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)
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template