结论:

sync.map遍历时删除操作是完全的,且可以完全删除指定的元素

实验结果下图:

代码如下:

package mainimport ("fmt""sync"
)// 遍历时删除所有的偶数,结果:确实删除了所有的偶数
func fun1() {x := sync.Map{}// 构建for i := 0; i < 100; i++ {x.Store(i, i)}// 遍历时删除偶数x.Range(func(k, v interface{}) bool {if k.(int)%2 == 0 {x.Delete(k)}return true})// 遍历打印剩下的cout := 0x.Range(func(k, v interface{}) bool {fmt.Println(k, v)cout++return true})// 会发现是50个,说明删除了所有的偶数fmt.Println("删除偶数后,剩余元素数,cout:", cout)
}// 遍历时删除所有元素,结果:确实删除了所有的元素
func fun2() {x := sync.Map{}// 构建for i := 0; i < 100; i++ {x.Store(i, i)}// 遍历时删除偶数x.Range(func(k, v interface{}) bool {x.Delete(k)return true})// 遍历打印剩下的cout := 0x.Range(func(k, v interface{}) bool {fmt.Println(k, v)cout++return true})// 会发现是0个,说明删除了所有的元素fmt.Println("全部删除后,剩余元素数,cout:", cout)
}
func main() {// 遍历时删除一半fun1()// 遍历时删除所有元素fun2()
}

go语言 sync.map遍历时删除可以全部删除相关推荐

  1. go语言map遍历时删除是安全的, 且可以完全删除

    结论: map遍历时删除操作是完全的,且可以完全删除指定的元素 实验结果如下图: 代码如下: package main import ("fmt" ) func main() {x ...

  2. c语言map函数k v都是int,Go语言sync.Map(在并发环境中使用的map)

    Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的. 下面来看下并发情况下读写 map 时会出现的问题,代码如下: // 创建一个int到int的映射 m := make(m ...

  3. Map遍历时删除元素

    package ee;import java.util.HashMap; import java.util.Iterator;public class Demo {public static void ...

  4. vector, list, map在遍历时删除符合条件的元素

    直接看源码,内有详细解释 /* 测试vector, list, map遍历时删除符合条件的元素 本代码测试环境: ubuntu12 + win7_x64 */ #include <iostrea ...

  5. 『每周译Go』Go sync map 的内部实现

    目录 引言 a. 简单介绍并发性及其在此上下文中的应用 sync.RWMutex 和 map 一起使用的问题 介绍 sync.Map a. 在哪些场景使用 sync.Map? sync.Map 实现细 ...

  6. java 中map的优点_java 中map遍历的四种方法和优缺点

    /** * 在for-each循环中使用entries来遍历 * 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用 * 如果遍历的是一个空的map,会报数组越界 ,java5引入 ...

  7. 深度解密Go语言之sync.map

    工作中,经常会碰到并发读写 map 而造成 panic 的情况,为什么在并发读写的时候,会 panic 呢?因为在并发读写的情况下,map 里的数据会被写乱,之后就是 Garbage in, garb ...

  8. go语言api源码中文版_Go语言学习——sync.map源码剖析

    1.简介 最近看了下Sync包,详读了sync.map源码,感觉源码实现还是比较巧妙的,有不少可以学习的地方:在讲源码前,先看下sync.map的"历史",从网上搜资料,sync. ...

  9. List遍历时删除与迭代器(Iterator)解惑

    文章目录 ArrayList 遍历时删除方法 for循环向后遍历的陷阱 增强型for循环(foreach)遇到的问题 使用迭代器进行遍历同时修改操作 iterator调用remove()方法为什么要先 ...

最新文章

  1. 《区块链原理、设计与应用》一3.3 征信和权属管理
  2. AI:人工智能概念之机器学习ML、深度学习DL、数据挖掘、知识发现、模式识别等重要领域之间比较关系结构图之详细攻略
  3. PMCAFF | 刷微信朋友圈行为分析:刷朋友圈是一种感觉?有一种批皇帝批奏章的感觉...
  4. 二级c语言无纸化三合一_学习攻略|计算机二级考试重点及注意事项
  5. C语言编程规范--------2 注释
  6. Spring Integration Publisher
  7. P1078 文化之旅[最短路]
  8. TensorFlow的基本介绍及Hello,world
  9. 【LeetCode笔记】169. 多数元素(Java、摩尔投票法、哈希表)
  10. StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎
  11. 开源无收入,全职开源仍是少数,企业开源成热门,开发者正在见证开源历史
  12. 拟合和统计中的检验参数
  13. 树莓派查看CPU温度
  14. Footprint Analytics: NEO 主网上线 5 年,现状如何?
  15. 机器学习第五章之决策树模型
  16. TX2安装opencv3.4.0
  17. 华为社招嵌入式软件面试_华为嵌入式软件开发面试经验
  18. 2022-2028年中国福利彩票行业市场运营格局及发展趋向分析报告
  19. urv中保研碰撞测试结果_深度解读中保研碰撞测试结果,多款热销车竟获“差评”...
  20. Linux系统的护花使者-----守护进程

热门文章

  1. 【Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)...
  2. 利用Scala特征(trait)的堆叠操作特性进行切面编程
  3. VB.NET实现DirectDraw9 (1) 托管的DDraw
  4. HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)
  5. HDU - 5475 An easy problem(线段树)
  6. Unhandled promise rejection Error: errCode: -501007 invalid parameters | errMsg: Invalid Key Name: _
  7. JavaScript二叉搜索树
  8. HDU4389(数位DP)
  9. ZJOI2019赛季回顾
  10. WinSock编程基础