sync.Map(在并发环境中使用的map)
sync.map 有以下特性:
需要并发读写时,一般的做法是加锁,但这样性能并不高,go语言在 1.9 版本中提供了一种效率较高的并发安全的 sync.map,sync.map 和 map 不同,不是以语言原生形态提供,而是在 sync 包下的特殊结构。
-
无须初始化,直接声明即可。
-
sync.map 不能使用 map 的方式进行取值和设置等操作,而是使用 sync.map 的方法进行调用,store 表示存储,load 表示获取,delete 表示删除。
-
使用 range 配合一个回调函数进行遍历操作,通过回调函数返回内部遍历出来的值,range 参数中回调函数的返回值在需要继续迭代遍历时,返回 true,终止迭代遍历时,返回 false。
并发安全的 sync.map 演示代码如下:
package main
import (
"fmt"
"sync"
)
func main() {
var scene sync.map
// 将键值对保存到sync.map
scene.store("greece", 97)
scene.store("london", 100)
scene.store("egypt", 200)
// 从sync.map中根据键取值
fmt.println(scene.load("london"))
// 根据键删除对应的键值对
scene.delete("london")
// 遍历所有sync.map中的键值对
scene.range(func(k, v interface{}) bool {
fmt.println("iterate:", k, v)
return true
})
}
100 true
iterate: egypt 200
iterate: greece 97
代码说明如下:
-
第 10 行,声明 scene,类型为 sync.map,注意,sync.map 不能使用 make 创建。
-
第 13~15 行,将一系列键值对保存到 sync.map 中,sync.map 将键和值以 interface{} 类型进行保存。
-
第 18 行,提供一个 sync.map 的键给 scene.load() 方法后将查询到键对应的值返回。
-
第 21 行,sync.map 的 delete 可以使用指定的键将对应的键值对删除。
-
第 24 行,range() 方法可以遍历 sync.map,遍历需要提供一个匿名函数,参数为 k、v,类型为 interface{},每次 range() 在遍历一个元素时,都会调用这个匿名函数把结果返回。
上一篇: Android屏幕适配
下一篇: Android实现文字滚动播放效果
推荐阅读
-
在JavaScript中操作数组之map()方法的使用
-
final关键词在多线程环境中的使用
-
iOS开发中,block与代理的对比,双方的优缺点及在什么样的环境下,优先使用哪一种更为合适?
-
详解在Angular4中使用ng2-baidu-map的方法
-
详解Python中logging日志模块在多进程环境下的使用
-
sync.Map(在并发环境中使用的map)
-
Go使用sync.Map来解决map的并发操作问题
-
在JavaScript中操作数组之map()方法的使用
-
详解Python中logging日志模块在多进程环境下的使用
-
iOS开发中,block与代理的对比,双方的优缺点及在什么样的环境下,优先使用哪一种更为合适?