Подтвердить что ты не робот

Почему 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
}

и он работает! Почему, во всяком случае, не работает слово с символом нижнего регистра на передней панели?

4b9b3361

Ответ 1

Go использует случай, чтобы определить, является ли конкретный идентификатор общедоступным или приватным в контексте вашего пакета. В первом примере поля не отображаются в json.Marshal, потому что это не часть пакета, содержащего ваш код. Когда вы изменили поля в верхнем регистре, они стали общедоступными, поэтому их можно было экспортировать.

Если вам нужно использовать идентификаторы нижнего регистра на вашем JSON-выходе, вы можете пометить поля с нужными идентификаторами. Например:

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