探索 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中文网其他相关文章!