首页 >后端开发 >Golang >为什么 Go 的 `json.Marshal` 不支持包含小写字段名称的结构?

为什么 Go 的 `json.Marshal` 不支持包含小写字段名称的结构?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 07:36:11939浏览

Why Doesn't Go's `json.Marshal` Work with Structs Containing Lowercase Field Names?

为什么 Go 无法为具有小写字段名称的结构生成 JSON?

首先,Go 使用大小写约定来区分包中的私有标识符和公共标识符。在提供的示例中,Machine 结构的字段(m_ip、m_type 和 m_serial)是私有的。因此,它们无法被定义它们的包外部的外部库(如 json.Marshal)访问。

在第二个代码片段中将字段名称更改为大写(MachIp、MachType 和 MachSerial)时,它们变得公开并可以导出。这允许 json.Marshal 成功生成 JSON 表示。

但是,如果您更喜欢使用小写字段名称,则可以使用字段标签手动指定所需的 JSON 字段名称。例如:

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

通过使用 json 标签注释字段,您实际上是指示 JSON 编码器在生成 JSON 输出时使用指定的字段名称。

以上是为什么 Go 的 `json.Marshal` 不支持包含小写字段名称的结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn