请问各位大佬:Go语言中大量使用 map[string]interface{} 会有哪些问题?
不写结构体,前端json直接解析为 map[string]interface{} ,直接处理 map[string] 值,返回前端的时候也是直接转为json。
数据库查数据也是直接返回 map[string]interface{}。
就和PHP数组一样的使用方法。
请问这样使用会出现哪些问题?内存多用多少?或者性能降低多少?
回复
1个回答

test
2024-07-18
如果只是一级的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。当然如果需求只是把前端拿回来的数据转手一下进行存储甚至不需要进行安全性校验,那怎么处理都可以。
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容