V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qq316107934
V2EX  ›  问与答

一个棘手的问题, golang 怎样才能动态增删 JSON 返回字段?

  •  
  •   qq316107934 · 2018-10-10 18:59:57 +08:00 · 1960 次点击
    这是一个创建于 2240 天前的主题,其中的信息可能已经有所发展或是发生改变。

    迫于需求需要在返回参数里面根据条件判断是否多加一个字段。 目前的手段:

    type struct1 struct{
     xxxx int
    }
    
    type struct2 struct{
     additional_info string
    }
    
    func xxx(){
       var data interface{} 
       if(condition){
          data = struct1{}
       }else{
          data=  struct2{}
       }
       data.xxxx=123
    }
    

    到最后一行会报 data.xxxx undefined (type interface {} is interface with no methods)错误。

    请问 golang 有办法使用类型重载或者增删 JSON 字段么?感谢!最好能兼顾效率。

    第 1 条附言  ·  2018-10-10 20:23:51 +08:00
    蠢了:解决方案很简单,用 omitempty
    7 条回复    2018-10-10 20:23:01 +08:00
    qq316107934
        1
    qq316107934  
    OP
       2018-10-10 19:34:39 +08:00 via Android
    自己顶一下,这种编译型语言很无解呀
    misaka19000
        2
    misaka19000  
       2018-10-10 19:57:55 +08:00 via Android
    用 map 不行吗?
    qq316107934
        3
    qq316107934  
    OP
       2018-10-10 20:06:33 +08:00
    @misaka19000 #2 struct 是 json unmarshal 出来的,不行,struct 转 map 再处理反射效率太低了,对并发有影响
    cin
        4
    cin  
       2018-10-10 20:07:36 +08:00   ❤️ 1
    type struct1 struct{
    xxxx int `json:"xxxx, omitempty"`
    }
    tag 加上 omitempty ?
    cloverstd
        5
    cloverstd  
       2018-10-10 20:07:45 +08:00 via iPhone
    SetXxxx
    unavph
        6
    unavph  
       2018-10-10 20:07:46 +08:00 via iPhone   ❤️ 1
    直接加在 struct1 里 omitempty 不行么?
    qq316107934
        7
    qq316107934  
    OP
       2018-10-10 20:23:01 +08:00
    @cin #4
    @unavph #6
    感觉正解了!感谢!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1692 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:45 · PVG 00:45 · LAX 08:45 · JFK 11:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.