首先,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中文网其他相关文章!