Почему Golang не может генерировать json из структуры с передним строчным символом?
Я пытаюсь распечатать результат json из созданной мной структуры я следующим образом:
type Machine struct {
m_ip string
m_type string
m_serial string
}
и распечатать
m:= &Machine{ m_ip:"test", m_type:"test", m_serial:"test" }
m_json:= json.Marshal(m)
fmt.Println(m_json)
Однако результат вернул только {}
Во-вторых, я попытался изменить первую букву слов на верхний регистр следующим образом:
type Machine struct{
MachIp string
MachType string
MachSerial string
}
и он работает! Почему, во всяком случае, не работает слово с символом нижнего регистра на передней панели?
Ответы
Ответ 1
Go использует случай, чтобы определить, является ли конкретный идентификатор общедоступным или приватным в контексте вашего пакета. В первом примере поля не отображаются в json.Marshal
, потому что это не часть пакета, содержащего ваш код. Когда вы изменили поля в верхнем регистре, они стали общедоступными, поэтому их можно было экспортировать.
Если вам нужно использовать идентификаторы нижнего регистра на вашем JSON-выходе, вы можете пометить поля с нужными идентификаторами. Например:
type Machine struct{
MachIp string `json:"m_ip"`
MachType string `json:"m_type"`
MachSerial string `json:"m_serial"`
}