Maison > développement back-end > Golang > Go Reflection Obtenez le nom du champ actuel mais une erreur sur une chaîne non typée avec des types incompatibles

Go Reflection Obtenez le nom du champ actuel mais une erreur sur une chaîne non typée avec des types incompatibles

WBOY
Libérer: 2024-02-06 10:30:04
avant
659 Les gens l'ont consulté

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

Contenu des questions

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
}
Copier après la connexion

Dans le code ci-dessus, la ligne :

return errors.New("Required field is missing." + fields.Field(i))
Copier après la connexion

Je souhaite inclure le nom du champ actuel dans le message d'erreur.

Voici l'erreur que je reçois :

<code>
invalid operation: "Required field is missing." + fields.Field(i) (mismatched types untyped string and reflect.Value)
</code>
Copier après la connexion

J'ai aussi essayé ceci :

return errors.New("Required field is missing." + fields.Field(i).String)
Copier après la connexion

Mais je comprends :

<code>
invalid operation: "Required field is missing." + fields.Field(i).String (mismatched types untyped string and func() string)
</code>
Copier après la connexion

J'ai aussi essayé ceci :

return errors.New("Required field is missing." + string(fields.Field(i)))
Copier après la connexion

Mais je comprends :

<code>
cannot convert fields.Field(i) (value of type reflect.Value) to type string [InvalidConversion]
</code>
Copier après la connexion

Quelqu'un peut-il m'orienter dans la bonne direction ou me proposer une solution ? Merci!


La bonne réponse


est obtenue à partir du type StructField. Obtenez le nom du champ auprès de StructField.

return fmt.Errorf("required field is missing: %s", fields.Type().Field(i).Name)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal