V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
zeroday
V2EX  ›  Go 编程语言

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

  •  
  •   zeroday · 2015-09-05 13:18:00 +08:00 · 1664 次点击
    这是一个创建于 3371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看 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:"…" 的形式指的是什么?

    10 条回复    2015-09-09 19:37:24 +08:00
    lostarry
        1
    lostarry  
       2015-09-05 13:30:39 +08:00   ❤️ 1
    beyondsoft
        2
    beyondsoft  
       2015-09-05 14:31:20 +08:00
    Field appears in JSON as key "myName".
    wayn3h0
        3
    wayn3h0  
       2015-09-05 14:43:19 +08:00   ❤️ 1
    @zeroday

    JSON 序列化和反序列化 的 key

    Timestamp time.Time `json:"timestamp"` 指定了 key, 序列化后 key 为 timestamp
    Timestamp time.Time 未指定 key, 序列化后 key 为 Timestamp
    Zzzzzzzzz
        4
    Zzzzzzzzz  
       2015-09-05 14:50:00 +08:00
    反射 Tag, Go 在运行时可以取到, 然后根据这个再处理具体业务, 比如表单的 field 、 数据表的 column 以及这个例子里的 json 字段, 但是这个特性一旦滥用拉性能拉得厉害.
    lynx
        5
    lynx  
       2015-09-05 15:11:24 +08:00
    参见 http://pkg.golang.org/pkg/reflect/#StructTag.Get

    通过反射可以获取 tag 的值
    shawngao
        6
    shawngao  
       2015-09-05 15:37:52 +08:00 via Android
    变量实际对应的 json 段的 key
    mengzhuo
        7
    mengzhuo  
       2015-09-05 22:59:52 +08:00
    struct 的 tag
    可以自己随便编的
    比如我写的 sdk 里
    ChargeType string `ucloud:"optional"`
    datou552211
        8
    datou552211  
       2015-09-06 10:51:03 +08:00 via iPhone   ❤️ 1
    顺带一句, tag 的性能很拖后退
    zeroday
        9
    zeroday  
    OP
       2015-09-06 15:01:20 +08:00
    @wayn3h0 谢谢,明白了。
    wayn3h0
        10
    wayn3h0  
       2015-09-09 19:37:24 +08:00
    @zeroday 不客气 另 omitempty 指定序列化 /反序列化时 可为空
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3110 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:24 · PVG 22:24 · LAX 06:24 · JFK 09:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.