请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

sync.map 和 map 既生瑜何生亮?

老师,我有一个疑惑请老师指点下。
我有个api接口,需要返回一个有多层嵌套的json,结构如下:

type AppInfoResult struct {
		Apk_name     string `json:"apk_name"`
		App_md5      string `json:"app_md5"`
		Down_url     string `json:"down_url"`
		//PidPriceInfo sync.Map
		PidPriceInfo  [map]S1
	}
type S1 struct {
	Price map[string]interface{}
}

像这样的嵌套的map,在并发会有map资源竞争的问题,
go1.9推出了sync.map来解决map并发时的不能同时读写的问题,是不是就是用来替代map加锁的写法?
但是sync.map的用法对于简单的数据结构还可以,一复杂的结构我觉得就很费劲,比如上面的结构,json又不能直接生成
请问老师,在做api接口的项目,因为http客户端本身就是并发的,是不是就不应该用普通map,都用sync.map? 用sync.map该如何处理json的问题?
或者应该选哪种解决方案呢?

正在回答

1回答

有好几点,我说一下。
一:sync.map比map代价大,所以两个必须都有。不需要同步的环境下使用map。需要同步的情况下当然首选sync.map。
二:json就是数据,数据是中立的,应当不是线程安全。json里面的整数字符串都不是,map也不是。所以不建议考虑json直接unmarshall出sync.map。
三:那么你的问题,我们比较好办的是把json出来的map全部倒到一个sync.map里。就好像整数我们也会拷出去到自己的结构里面。
另一方面,如果这个map太大,我们只能麻烦点。我们直接使用这个map,但是需要加锁。这样的话,就不用sync.map

1 回复 有任何疑惑可以回复我~
  • 提问者 weibo_隱懓_0 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-10-30 08:45:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信