Maison >développement back-end >Golang >Pourquoi « json.Marshal » de Go n'inclut-il pas les champs de structure avec des noms en minuscules ?

Pourquoi « json.Marshal » de Go n'inclut-il pas les champs de structure avec des noms en minuscules ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 01:21:11251parcourir

Why Doesn't Go's `json.Marshal` Include Struct Fields with Lowercase Names?

Pourquoi Golang ne parvient-il pas à générer du JSON à partir d'une structure avec un caractère initial minuscule ?

Lorsqu'ils tentent de rassembler une structure en JSON, les développeurs peuvent rencontrer un problème inattendu où le le résultat est renvoyé sous la forme d'un objet vide. Ce comportement découle de l'utilisation par Go de la casse pour différencier les identifiants privés et publics.

Dans l'exemple fourni, la structure Machine a des champs avec des caractères initiaux minuscules :

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

Par défaut, Go considère les identifiants avec des caractères initiaux minuscules comme privés. Cela signifie que les champs dans Machine ne sont pas visibles par json.Marshal car ils ne font pas partie du même package que le code.

Pour résoudre ce problème, les développeurs peuvent choisir de changer les noms des champs en majuscules, ce qui rend les publics :

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}

Cependant, si les développeurs souhaitent conserver les identifiants en minuscules dans la sortie JSON, ils peuvent utiliser JSON tags:

type Machine struct {
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}

En ajoutant json:"m_ip" au champ MachIp, par exemple, le JSON résultant inclura l'identifiant en minuscule souhaité. Ceci est obtenu car la balise JSON remplace le comportement de casse par défaut.

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!

Déclaration:
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