duandai3964 2014-02-17 09:32
浏览 70
已采纳

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

I am trying to print json result from struct I created as following:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

and print out

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

However, result returned just {}

Secondly,I tried to changed the first letter of words to Uppercase as follow:

type Machine struct{
  MachIp string
  MachType string
  MachSerial string
}

and it works! Why doesn't the word with lowercase character at the front work, anyway?

  • 写回答

1条回答 默认 最新

  • dorbmd1177 2014-02-17 09:40
    关注

    Go uses case to determine whether a particular identifier is public or private within the context of your package. In your first example, the fields are not visible to json.Marshal because it is not part of the package containing your code. When you changed the fields to be upper case, they became public so could be exported.

    If you need to use lower case identifiers in your JSON output though, you can tag the fields with the desired identifiers. For example:

    type Machine struct{
        MachIp     string `json:"m_ip"`
        MachType   string `json:"m_type"`
        MachSerial string `json:"m_serial"`
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装