不写结构体,前端json直接解析为 map[string]interface{} ,直接处理 map[string] 值,返回前端的时候也是直接转为json。
数据库查数据也是直接返回 map[string]interface{}。
就和PHP数组一样的使用方法。
请问这样使用会出现哪些问题?内存多用多少?或者性能降低多少?
不写结构体,前端json直接解析为 map[string]interface{} ,直接处理 map[string] 值,返回前端的时候也是直接转为json。
数据库查数据也是直接返回 map[string]interface{}。
就和PHP数组一样的使用方法。
请问这样使用会出现哪些问题?内存多用多少?或者性能降低多少?
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
如果只是一级的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。
当然如果需求只是把前端拿回来的数据转手一下进行存储甚至不需要进行安全性校验,那怎么处理都可以。