1、存在的问题
- 为了考虑通用性,所有的key和value都是interface{},换言之,我们失去了类型检查提供的安全性而且被迫更多的使用类型断言,后果:
- 在每次调用API后都小心翼翼地使用类型断言,你的代码里面出现无数的if v,ok=value.(xxType);!ok{}
2、解决方案
2.1 方案一
- 如果有明确类型,一个简单的思路是封装snyc.Map,外部函数限制传给sync.Map的API的参数类型,但是灵活性较差
1 | go复制代码type StringMap struct{ |
2.2 方案二
- 用反射来帮助我们做类型检查(下面的代码来自于极客时间《go核心36讲》附属源代码)
1 | go复制代码type ConcurrentMap struct { |
本文转载自: 掘金