Golang Go语言中struct变量类型后加类似`json:"…"`的形式指的是什么?

发布于 1周前 作者 sinazl 来自 Go语言

最近在看 golang 的代码,看到这么一段

type ContainerStats struct {
    // The time of this stat point.
    Timestamp time.Time    `json:"timestamp"`
    Cpu       CpuStats     `json:"cpu,omitempty"`
    DiskIo    DiskIoStats  `json:"diskio,omitempty"`
    Memory    MemoryStats  `json:"memory,omitempty"`
    Network   NetworkStats `json:"network,omitempty"`

}

请问 类型后 json:"…" 的形式指的是什么?


Golang Go语言中struct变量类型后加类似`json:"…"`的形式指的是什么?

更多关于Golang Go语言中struct变量类型后加类似`json:"…"`的形式指的是什么?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

11 回复

更多关于Golang Go语言中struct变量类型后加类似`json:"…"`的形式指的是什么?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Field appears in JSON as key “myName”.



JSON 序列化和反序列化 的 key

Timestamp time.Time json:"timestamp" 指定了 key, 序列化后 key 为 timestamp
Timestamp time.Time 未指定 key, 序列化后 key 为 Timestamp

反射 Tag, Go 在运行时可以取到, 然后根据这个再处理具体业务, 比如表单的 field 、 数据表的 column 以及这个例子里的 json 字段, 但是这个特性一旦滥用拉性能拉得厉害.

变量实际对应的 json 段的 key

struct 的 tag
可以自己随便编的
比如我写的 sdk 里
ChargeType string ucloud:"optional"

顺带一句, tag 的性能很拖后退

谢谢,明白了。

不客气 另 omitempty 指定序列化 /反序列化时 可为空

在Go语言中,struct变量类型后加类似json:"…"的形式是一种结构体标签(struct tag),它用于指定该结构体字段在JSON序列化和反序列化时的行为。具体来说,这是结构体字段标签(field tag)的一种用法,通常与encoding/json包一起使用。

这种标签允许你定义结构体字段在JSON中的表示形式,包括字段名、是否忽略该字段、是否使用字符串表示数字等。例如:

type Person struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Email   string `json:"email,omitempty"` // 如果Email为空,则在序列化时忽略
}

在这个例子中,Person结构体有三个字段:NameAgeEmail。通过结构体标签,我们指定了在JSON中这三个字段分别对应nameageemail。当我们将Person实例序列化为JSON时,Name字段会映射为nameAge字段会映射为age,而Email字段只有在非空时才会被包含在JSON中(由于omitempty选项)。

这种机制使得Go语言的结构体能够灵活地与JSON数据进行转换,是处理JSON数据时非常有用的特性。通过使用结构体标签,你可以精确地控制结构体字段与JSON数据之间的映射关系,从而简化数据交换和处理的代码。

回到顶部