为什么Golang不能从具有前小写字符的struct生成json?

时间:2014-02-17 09:32:54

标签: go goroutine

我正在尝试从我创建的struct中打印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 个答案:

答案 0 :(得分:66)

Go用例来确定特定标识符在包的上下文中是公共标识符还是私有标识符。在第一个示例中,json.Marshal无法看到这些字段,因为它不是包含代码的包的一部分。当您将字段更改为大写字母时,它们变为公共字段,因此可以导出。

如果您需要在JSON输出中使用小写标识符,则可以使用所需的标识符标记字段。例如:

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