¿Por qué Golang no puede generar json a partir de una estructura con carácter en minúsculas frontal?


Estoy tratando de imprimir el resultado json de la estructura que creé de la siguiente manera:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

E imprimir

m:= &Machine{ m_ip:"test", m_type:"test", m_serial:"test" }
m_json:= json.Marshal(m)
fmt.Println(m_json)

Sin embargo, el resultado devuelto solo {}

En segundo lugar, traté de cambiar la primera letra de las palabras a Mayúsculas como sigue:

type Machine struct{
  MachIp string
  MachType string
  MachSerial string
}

Y funciona! ¿Por qué la palabra con carácter minúsculo en la parte delantera no funciona, de todos modos?

Author: A-letubby, 2014-02-17

1 answers

Go usa case para determinar si un identificador en particular es público o privado dentro del contexto de su paquete. En su primer ejemplo, los campos no son visibles para json.Marshal porque no es parte del paquete que contiene su código. Cuando cambiaste los campos para que fueran mayúsculas, se hicieron públicos para que pudieran exportarse.

Si necesita usar identificadores en minúsculas en su salida JSON, puede etiquetar los campos con los identificadores deseados. Por ejemplo:

type Machine struct{
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}
 62
Author: James Henstridge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-17 09:40:00