请问各位大佬:Go语言中大量使用 map[string]interface{} 会有哪些问题?

不写结构体,前端json直接解析为 map[string]interface{} ,直接处理 map[string] 值,返回前端的时候也是直接转为json。

数据库查数据也是直接返回 map[string]interface{}。

就和PHP数组一样的使用方法。

请问这样使用会出现哪些问题?内存多用多少?或者性能降低多少?

阅读 3.1k
2 个回答

如果只是一级的map,那么根据需求对value的值进行断言,需要校验前端传值类型错误的问题。
如果有多级的map比如map[string]map[string]int如果用map[string]interface{}接收那么map[string]int这一段的类型就会变成interface,需要对这个interface再次反序列化,当然每一次都需要判断前端传值是否正确的问题。
golang原生的json包使用大量反射,如果每一级的value再次反序列化一遍,性能影响肯定大,就算不考虑多级的,单纯每一个key的value进行断言,代码都够呛。而使用对应的结构体,就没有断言或者其他判断类型错误的额外代码,只需要判断error。有必要再加上一个validator就可以把前端传的内容校验的差不多了。
或者想方便使用json不如选择fastjson或者gjson。
当然如果需求只是把前端拿回来的数据转手一下进行存储甚至不需要进行安全性校验,那怎么处理都可以。

没有任何问题,一切正常!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题