Golang中的同步工具sync.Map示例详解

 更新时间:2023年05月22日 15:09:56   作者:路多辛  
sync.Map是Golang标准库提供的并发安全的Map类型,可以在多个goroutine并发读写Map的场景下不需要加锁,这篇文章主要介绍了Golang中的同步工具sync.Map详解,需要的朋友可以参考下

sync.Map

sync.Map是Golang标准库提供的并发安全的Map类型,可以在多个goroutine并发读写Map的场景下不需要加锁。sync.Map最典型的两个使用场景:

  • 写少读多的场景,特别是只写一次,读取多次的场景,例如缓存;
  • 当多个程序读取、写入和修改的场景。

sync.Map 提供如下几个方法:

  • Store(key , value any):向Map中存储键值对
  • Load(key any):根据键获取值
  • Delete(key any):删除键值对
  • LoadAndDelete(key any):获取并删除键值对
  • LoadOrStore(key, value any) :如果key已经存在,返回对应值,如果不存在,存储键值对
  • Range(f func(key, value any) bool):遍历Map中的键值对

使用方法和示例

package main
import (
	"fmt"
	"sync"
)
func main() {
	var m sync.Map
	// 存储键值对
	m.Store("key", "value")
	// 根据键获取值
	val, ok := m.Load("key")
	if ok {
		fmt.Println(val)
	}
	// 遍历所有键值对
	m.Range(func(k, v interface{}) bool {
		fmt.Println("key:", k, ",value:", v)
		return true
	})
	// 删除键值对
	m.Delete("key")
}

小结

sync.Map是Golang中非常实用非常强大的同步工具,可用于实现并发安全的Map数据结构,在并发访问的场景中可以提高程序的可靠性和性能。

到此这篇关于Golang中的同步工具sync.Map详解的文章就介绍到这了,更多相关Golang sync.Map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang使用channel实现一个优雅退出功能

    Golang使用channel实现一个优雅退出功能

    最近补 Golang channel 方面八股的时候发现用 channel 实现一个优雅退出功能好像不是很难,之前写的 HTTP 框架刚好也不支持优雅退出功能,于是就参考了 Hertz 优雅退出方面的代码,为我的 PIANO 补足了这个 feature
    2023-03-03
  • Golang打印复杂结构体两种方法详解

    Golang打印复杂结构体两种方法详解

    在 Golang 语言开发中,我们经常会使用结构体类型,如果我们使用的结构体类型的变量包含指针类型的字段,我们在记录日志的时候,指针类型的字段的值是指针地址,将会给我们 debug 代码造成不便
    2022-10-10
  • Go操作Kafka和Etcd方法详解

    Go操作Kafka和Etcd方法详解

    这篇文章主要为大家介绍了Go操作Kafka和Etcd方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • go语言通过odbc操作Access数据库的方法

    go语言通过odbc操作Access数据库的方法

    这篇文章主要介绍了go语言通过odbc操作Access数据库的方法,实例分析了Go语言通过odbc连接、查询与关闭access数据库的技巧,需要的朋友可以参考下
    2015-03-03
  • 通过函数如何将golang float64 保留2位小数(方法汇总)

    通过函数如何将golang float64 保留2位小数(方法汇总)

    这篇文章主要介绍了通过函数将golang float64保留2位小数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 详解Golang并发控制的三种方案

    详解Golang并发控制的三种方案

    本文主要介绍了详解Golang并发控制的三种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • golang开发 gorilla websocket的使用示例详解

    golang开发 gorilla websocket的使用示例详解

    这篇文章主要介绍了golang开发 gorilla websocket的使用示例详解,介绍了websocket的简单使用,我们使用的版本是1.3.0,具体操作方法跟随小编一起学习吧
    2024-05-05
  • go结构体嵌套的切片数组操作

    go结构体嵌套的切片数组操作

    这篇文章主要介绍了go结构体嵌套的切片数组操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang语法使用的注意事项

    golang语法使用的注意事项

    这篇文章主要给大家介绍了关于golang语法使用的一些注意事项,Golang是一种静态类型的编程语言,它支持基本的数据类型,包括整型、浮点型、布尔型、字符串型,需要的朋友可以参考下
    2023-07-07
  • Go语言中使用 buffered channel 实现线程安全的 pool

    Go语言中使用 buffered channel 实现线程安全的 pool

    这篇文章主要介绍了Go语言中使用 buffered channel 实现线程安全的 pool,因为Go语言自带的sync.Pool并不是很好用,所以自己实现了一线程安全的 pool,需要的朋友可以参考下
    2014-10-10

最新评论