Golang 异步对象序列化Map并发冲突和解决方法
冲突过程 异步对象序列化,对象里面如果有map,并且使用json.marshal to string,或者其他方式对map 执行了read、write操作。而业务逻辑同步写对象map值,那么,就会触发: fatal error: concurrent map read and map write本质原因在于:两个goroute对同一个map执行了读写并发,而golang map默认是不支持并发操作、没有加锁 冲突解决 (1)在主业务逻辑里面,提前把对象转为string,丢给异步任务去执行(不局限写log,可以是其他对map的操作) (2)map 的读写加锁,而读写加锁对性能的影响,以及死锁等又带来新的麻烦。关于优化并发map的可以参考这个分析,比较全面:https://misfra.me/optimizing-concurrent-map