一尘不染

为什么Golang无法使用前小写字符从struct生成json?

go

我正在尝试从以下创建的结构中打印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
}

而且有效!无论如何,为什么前面没有小写字母的单词呢?


阅读 472

收藏
2020-07-02

共1个答案

一尘不染

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

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

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