golang能在并发环境中使用的map---sync.map

package main

import (
	"fmt"
	"sync"
)

func main() {
	var scene sync.Map
	scene.Store("greece", 97)
	scene.Store("london", 100)
	scene.Store("egypt", 200)
	fmt.Println(scene.Load("london"))
	scene.Delete("london")
	scene.Range(func(k, v interface{}) bool {
		fmt.Println("iterate:", k, v)
		return true
	})
}

golang能在并发环境中使用的map---sync.map_第1张图片

golang没有为map提供任何清空所有元素的函数,方法。清空map的唯一办法就是重新make一个新的map。

但是处理并发问题map就会竞态。一般操作就是加锁,或者sync.map,需要使用sync特殊包

sync.map有以下特性:

无需初始化,直接声明即可。不能使用map的方式取值和设置等操作。store 存储,load获取 delete删除

使用Range配合一个回调函数进行遍历操作,通过回调函数返回内部遍历出来的值。range参数中

的回调函数的返回值功能是:需要继续迭代遍历时,返回true;终止是false

声明sense,类型为sync.map,此时sync.map不能使用make创建,将一系列键值对保存到

sync.map中,sync.map将键和值以interface{}类型保存

提供一个sync.map的键给scene.load()方法后将查询到键对应的值返回sync.map的delete可以使用

指定的键将对应的键值删除

Range()方法可以遍历sync.map遍历需要提供一个匿名函数,参数为K,V类型为interface{}

每次range()遍历一个元素是,都会调用这个匿名函数吧结果返回

非并发情况下,使用map相比使用sync.map会有更好的性能

你可能感兴趣的:(golang)