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提供任何清空所有元素的函数,方法。清空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会有更好的性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值