为什么struct field的格式字符串总是小写

时间:2017-04-17 02:12:42

标签: json go

使用json编码/解码结构时,几乎所有的代码都使用相同的字段名称,但是小写的首字母,为什么会这样?

由于名称相同,并且json当然可以适用于任何情况,为什么要添加这个重复的东西:

Name string `json:"name"`

为什么不使用Name string?在其他情况下,如果名称与go字段名称不同,则添加格式字符串是有意义的:

Name string `json:"MyName"`

3 个答案:

答案 0 :(得分:4)

encoding/json documentation说:

  

每个struct字段的编码可以通过struct field标记中“json”键下存储的格式字符串进行自定义。格式字符串给出了字段的名称,可能后跟逗号分隔的选项列表。名称可以为空,以便指定选项而不覆盖默认字段名称。

应用程序在标记中指定小写名称以在JSON中生成小写名称。

此结构

type Example struct {
  Name1 string
  Name2 string `json:"name1"`
}

编码为:

{
  "Name1": "1",
  "name1": "2"
}

playground example

JSON只要求字段名称是有效字符串。 JSON中不需要小写名称。也就是说,在JSON中使用小写字母启动字段名称是很常见的做法。

答案 1 :(得分:1)

Name string `json:"name" db:"SomeName"`

请记住,用于调整de / serialization的字符串json:"name" db:"Name"可以在json或数据库中。

用于命名它取决于输出。如果数据库字段为SomeName,则必须定义db SomeName

  

所以我的问题是为什么几乎所有应用程序都想使用小写?

如果您遇到使用仅使用小写的输出json的源代码,这显然是为了保持一致性输出。

如果变量的小写也会产生不同的效果,对于小写充当private变量,大写充当public变量,因此可以通过包访问。

答案 2 :(得分:1)

  

使用json编码/解码结构时,几乎所有的代码都使用相同的字段名称,但是小写的首字母,为什么会这样?

因为JavaScript传统上/优先使用camelCase来表示变量和函数名称,所以JSON(源自JavaScript世界)自然也是如此。

当然,这不是强制执行标准,而且有许多竞争标准。但问题是为什么这是常见的,这似乎是最可能的答案。

当然,您可以自由地使用任何JSON密钥名称的套管系统,并且您肯定会在真实软件中找到任何套管系统(包括缺少系统)的示例。