Go Reflection Aktuellen Feldnamen abrufen, aber Fehler bei untypisierter Zeichenfolge mit nicht übereinstimmenden Typen

WBOY
Freigeben: 2024-02-06 10:30:04
nach vorne
653 Leute haben es durchsucht

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

问题内容

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
}
Nach dem Login kopieren

在上面的代码中,一行:

return errors.New("Required field is missing." + fields.Field(i))
Nach dem Login kopieren

我想在错误消息中包含当前字段的名称。

这是我收到的错误:

<code>
invalid operation: "Required field is missing." + fields.Field(i) (mismatched types untyped string and reflect.Value)
</code>
Nach dem Login kopieren

我也尝试过这个:

return errors.New("Required field is missing." + fields.Field(i).String)
Nach dem Login kopieren

但我明白了:

<code>
invalid operation: "Required field is missing." + fields.Field(i).String (mismatched types untyped string and func() string)
</code>
Nach dem Login kopieren

我也尝试过这个:

return errors.New("Required field is missing." + string(fields.Field(i)))
Nach dem Login kopieren

但我明白了:

<code>
cannot convert fields.Field(i) (value of type reflect.Value) to type string [InvalidConversion]
</code>
Nach dem Login kopieren

有人能给我指出正确的方向或提供解决方案吗?谢谢!


正确答案


从类型中获取StructField。从 StructField 获取字段名称

return fmt.Errorf("required field is missing: %s", fields.Type().Field(i).Name)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGo Reflection Aktuellen Feldnamen abrufen, aber Fehler bei untypisierter Zeichenfolge mit nicht übereinstimmenden Typen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage