首页 > 后端开发 > Golang > 为什么 Go 的 json.Marshal() 不序列化带有小写前缀的结构体字段?

为什么 Go 的 json.Marshal() 不序列化带有小写前缀的结构体字段?

Mary-Kate Olsen
发布: 2024-12-21 21:44:46
原创
544 人浏览过

Why Doesn't Go's `json.Marshal()` Serialize Struct Fields with Lowercase Prefixes?

探索 Go 中带有小写前缀的结构体字段的 JSON 生成限制

在 Go 中,开发人员在尝试从以下内容生成 JSON 时经常遇到问题拥有带有小写前缀字符的字段的结构。了解根本原因对于有效解决此问题至关重要。

该问题的出现是由于 Go 在包内识别公共标识符的约定。首字母大写的标识符被认为是公共的,可以在包外访问。相反,首字母小写的标识符被视为私有,并且仅在当前包中可见。

考虑以下代码片段:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}
登录后复制

当尝试从实例生成 JSON 时如果使用 json.Marshal() 这个结构,您可能会遇到意外结果“{}”。这是因为字段 m_ip、m_type 和 m_serial 对 json.Marshal() 不可见,因为它们被视为私有(由小写前缀表示)。

但是,将字段更改为大写,如下所示,将解决该问题:

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}
登录后复制

通过使用大写前缀,您可以公开访问这些字段,从而允许json.Marshal() 成功生成所需的 JSON 输出。

如果您需要在 JSON 输出中使用小写标识符,则可以使用字段标记。通过使用相应的 JSON 名称注释每个字段,您可以覆盖默认行为。例如:

type Machine struct {
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}
登录后复制

通过此标记机制,您可以显式指定所需的 JSON 字段名称,无论其初始字符大小写如何,从而使您能够创建符合应用程序要求的 JSON 输出。

以上是为什么 Go 的 json.Marshal() 不序列化带有小写前缀的结构体字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板