文档章节

Go1.9 安全map用法

ChamPly
 ChamPly
发布于 2017/08/31 13:05
字数 329
阅读 77
收藏 0

Go1.9 安全map使用

sync.map就是1.9版本带的线程安全map,主要有:

  • Store
  • LoadOrStore
  • Load
  • Delete
  • Range

这几种用法


Store(key, value interface{})

说明: 存储一个设置的键值

LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)

说明: 返回键的现有值(如果存在),否则存储并返回给定的值,如果是读取则返回true,如果是存储返回false

Load(key interface{}) (value interface{}, ok bool)

说明: 读取存储在map中的值,如果没有值,则返回nil。OK的结果表示是否在map中找到值

Delete(key interface{})

说明: 删除键对应的值

Range(f func(key, value interface{}) bool)

说明: 循环读取map中的值

代码如下:

package main

import (
    "fmt"
    "sync"
)

type userInfo struct {
    Name string
    Age  int
}

var m sync.Map

func main() {

    vv, ok := m.LoadOrStore("1", "one")
    fmt.Println(vv, ok) //one false

    vv, ok = m.Load("1")
    fmt.Println(vv, ok) //one true

    vv, ok = m.LoadOrStore("1", "oneone")
    fmt.Println(vv, ok) //one true

    vv, ok = m.Load("1")
    fmt.Println(vv, ok) //one true

    m.Store("1", "oneone")
    vv, ok = m.Load("1")
    fmt.Println(vv, ok) // oneone true

    m.Store("2", "two")
    m.Range(func(k, v interface{}) bool {
        fmt.Println(k, v)
        return true
    })

    m.Delete("1")
    m.Range(func(k, v interface{}) bool {
        fmt.Println(k, v)
        return true
    })

    map1 := make(map[string]userInfo)
    var user1 userInfo
    user1.Name = "ChamPly"
    user1.Age = 24
    map1["user1"] = user1

    var user2 userInfo
    user2.Name = "Tom"
    user2.Age = 18
    m.Store("map_test", map1)

    mapValue, _ := m.Load("map_test")

    for k, v := range mapValue.(interface{}).(map[string]userInfo) {
        fmt.Println(k, v)
        fmt.Println("name:", v.Name)
    }
}

执行结果:
这里写图片描述

by : champly

2017年8月27日

© 著作权归作者所有

共有 人打赏支持
ChamPly

ChamPly

粉丝 11
博文 42
码字总数 32506
作品 0
朝阳
程序员
私信 提问
一个GO语言性能问题的发现和解决

本文是大 U 同事的一篇实操性经验贴,是发现问题、分析问题到解决问题的完整案例,借此分享,希望对各位有所帮助。 事件起因 事情起因于公司一位同事在内部邮件组中 post 了一个问题,一个使...

UCloudTech
10/29
0
0
Go圣经-学习笔记之封装还是组合

上一篇 Go圣经-学习笔记之方法 下一篇 Go圣经-学习笔记之方法值和表达式 通过结构体嵌入扩展类型 在前面文章中,已经介绍了结构体中的匿名成员。今天我们介绍下对象的行为集扩展。 上面的p对...

cdh0805010
2017/10/26
0
0
go执行文件报错:cannot execute binary file?

go bulid 出来的文件,执行出错,提示 “-bash: .: a: cannot execute binary file” 附: 当前系统:Linux iZ2zec4vask3fxzvkdbpjuZ 2.6.32-696.3.2.el6.x86_64 #1 SMP Tue Jun 20 01:26:5......

雨明yzs
2017/08/30
236
1
Go圣经-学习笔记之复合类型(二)

上一篇 Go圣经-学习笔记之复合类型 下一篇 Go圣经-学习笔记之复合数据结构(三) map介绍和简单使用 map是一种无序的key/value对的集合,在Go语言中,一个map就是一个hash表的引用。map中的key...

cdh0805010
2017/10/23
0
0
(1)集合 ---遍历map集合

Map接口 实现Map接口的类用来存储键(key)-值(value) 对。 Map 接口的实现类有HashMap和TreeMap等。 Map类中存储的键-值对通过键来标识,所以键值不能重复。 HashMap: 线程不安全,效率高....

无信不立
2014/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Rainbond V5.0 Beta公测公告

Rainbond支撑企业应用的开发、架构、交付和运维的全流程,通过“无侵入”架构无缝衔接各类企业应用,底层资源可以对接和管理IaaS、虚拟机和物理服务器 Rainbond V5.0即日起开启Beta版本公测,...

好雨云帮
12分钟前
1
0
Word Pattern(leetcode290)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empt......

woshixin
17分钟前
0
0
Kubernetes 1.13.1快速升级

Kubernetes 1.13.1已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
20分钟前
1
0
多线程的实现方式

多线程是指 一个程序运行时,产生或使用了不止一个线程。 线程的生命周期是怎么样的,下面这张图我们可以看出些端倪: 这章我们主要讨论多线程实现的方式,基础知识部分我们可以下来再恶补。...

搬砖大侠
33分钟前
1
0
新人千万不要在 Windows 上使用 Ruby on Rails

标题:新人千万不要在 Windows 上使用 Ruby on Rails 副标题:鼓励新人在 Linux 和 Mac 上使用 Ruby on Rails ! 原则:要走寻常路,不要学美特斯邦伟! "在 Windows上 使用 Ruby on Rails "是...

Jason909
41分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部