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

2018-10-10 18:59:57 +08:00
 qq316107934

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

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 字段么?感谢!最好能兼顾效率。

1949 次点击
所在节点    问与答
7 条回复
qq316107934
2018-10-10 19:34:39 +08:00
自己顶一下,这种编译型语言很无解呀
misaka19000
2018-10-10 19:57:55 +08:00
用 map 不行吗?
qq316107934
2018-10-10 20:06:33 +08:00
@misaka19000 #2 struct 是 json unmarshal 出来的,不行,struct 转 map 再处理反射效率太低了,对并发有影响
cin
2018-10-10 20:07:36 +08:00
type struct1 struct{
xxxx int `json:"xxxx, omitempty"`
}
tag 加上 omitempty ?
cloverstd
2018-10-10 20:07:45 +08:00
SetXxxx
unavph
2018-10-10 20:07:46 +08:00
直接加在 struct1 里 omitempty 不行么?
qq316107934
2018-10-10 20:23:01 +08:00
@cin #4
@unavph #6
感觉正解了!感谢!!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/496447

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX