自动生成代替interface的线程安全map

https://github.com/ggaaooppeenngg/safemap

项目当中经常要使用线程安全的map,但是实际编码的时候会因为失误引入一些非线程安全的代码。 把这些东西封装成一个包是一个比较好的方式。

这个工具的主要的特点是能够根据类型自动生成线程安全的map,做了一些简单的测试如果用interface类型转换的代价和用自动生成的固定类型的代价可能差距大概是20ns/op(40ns/op-20ns/op)的一个差距,当然这个差距并不是很致命的一个问题,至少用代码生成可以对性能有一个提升,可能引起的问题是项目中类似的map过多,生成的map的代码可能会很多,所以综合考量的话,在一个包里只有一两个map是要保证线程的安全的话,其实是很适合的,也比较方便管理,不管是在build的时候生成还是把生成的代码放入版本控制当中。当然也有很多自动生成的库可以用,但是为了减少依赖并没有使用。

使用方式可以结合go generate使用,比如在代码中嵌入。

//go:generate safemap -k string -v string -n namespace

在项目中会生成namespace_safemap.go文件,类型为type namespaceSafemap map[string]string,对应的GetSet方法是线程安全的。

目前正在做的是一个类似的实现思路的cache,https://github.com/ggaaooppeenngg/cachemap

0 个评论

要回复文章请先登录注册