文档章节

Go1.9 安全map用法

ChamPly
 ChamPly
发布于 2017/08/31 13:05
字数 329
阅读 22
收藏 0
点赞 1
评论 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执行文件报错:cannot execute binary file?

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

雨明yzs ⋅ 2017/08/30 ⋅ 1

(1)集合 ---遍历map集合

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

无信不立 ⋅ 2014/07/09 ⋅ 0

List,Set,Map用法以及区别

List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是。 如图: Collection   ├List   │├LinkedList   │├ArrayList   │└Vector   │ └Stack   └Set   ...

varchard ⋅ 2015/03/26 ⋅ 3

Go语言大改进,这是企图干掉Java的节奏?

  【IT168 评论】近日有消息称,为改进Go语言,谷歌可能赋予Go语言类似于微软和Red Hat的语言服务器协议的语言服务器。消息是从Go语言开发者的讨论组中流出,但目前改进的主要方面还没有敲...

it168网站 ⋅ 2017/08/09 ⋅ 0

Martini 的工作方式

后续参见Martini 中的 Handler 匿名字段 因为golang中没有继承, golang中用的方法是匿名字段, 很多golang开发者称之为复合, 可是我没有发现官方文档中对此进行正规命名, 用继承这个词肯定不合...

喻恒春 ⋅ 2014/01/14 ⋅ 14

go map详细使用方法

go map 比较深入的使用方案 参考blog: https://blog.golang.org/go-maps-in-action 现在基本上所有的编程语言都有自带的map,或者dict,主要提供一个快速的查找,插入,删除,具备与存储体量...

来福马斯特 ⋅ 2017/11/07 ⋅ 0

LiteIDE X33.1 发布,Go 语言开发工具

Go 语言开发工具 LiteIDE X33.1 正式发布。新版本对菜单进行调整和规范,新增了工具菜单,编辑菜单保持可见,重命名了部分工具窗口。修复了编辑器内查找功能的全文替换错误,对快速打开文件操...

七叶 ⋅ 2017/12/12 ⋅ 15

consul 1.0 server cluster集群配置全解密

一、背景故事:上周四听了美的MySQL数据库利用consul实现高可用,还有redis 集群模式,让我对consul产生了浓厚的兴趣,特花了三四天的时间研究consul集群,consul的特点是什么呢? 1、 使用 ...

weiyanwei412 ⋅ 2017/10/24 ⋅ 0

JAVA中的集合类Map、Set、List

JAVA中的集合类Map、Set、List (2013-05-05 18:51:27) 转载▼ 1、JAVA集合类都放在java.util包中 2、JAVA集合类不能存放基本数据类型,只能存放对象的引用。 3、Set:集合中对象不按特定的方式...

小和尚敲代码 ⋅ 2016/02/02 ⋅ 0

《Effective Go》--Maps

    Map是一种方便,强大的内建数据结构,其将一个类型的值(key)与另一个类型的值(element或value) 关联一起。key可以为任何定义了等于操作符的类型,例如整数,浮点和复数,字符串,...

xunzaosiyecao ⋅ 2017/11/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring表达式语言(SpEL)

1、SpEL引用 Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。 SpEL的...

霍淇滨 ⋅ 35分钟前 ⋅ 0

Gradle使用阿里云镜像

gradle 生命周期中有一个初始化( Initialization )的过程,这个过程运行在 build script 之前,我们可以在这个地方做一点系统全局的设置,如配置仓库地址。 你可以在以下几个位置实现仓库地址...

明MikeWoo ⋅ 43分钟前 ⋅ 0

appium+python3.6

1.安装jdk1.8(不知道为啥只识别1.8,1.10不识别,所以为了少折腾,迁就安装1.8) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置 JAVA_HOME:...

Kampfer ⋅ 今天 ⋅ 0

详解Apache 日志分割教程

一、日志切割 安装cronolog CentOS 5.3中编译安装Apache日志默认是不切割的,需要用用工具Cronnolog进行日志切割。 1.下载及安装 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz ...

dragon_tech ⋅ 今天 ⋅ 0

Keepalived介绍

负载均衡器(Load Balancer, LB )是一组能够将IP数据流以负载均衡形式转发到多台物理服务器的集成软件。有硬件负载均衡器和软件负载均衡器之分,硬件负载均衡器主要是在访问网络和服务器之间...

寰宇01 ⋅ 今天 ⋅ 0

java8-Collections and Streams

stream和集合的区别是什么? 1.在计算的时候处理不同, 2.every element should be computed in the memory and then to be part of collections stream Stream apis filter with a predica......

writeademo ⋅ 今天 ⋅ 0

Confluence 6 重新获得附件指南

每一个文件在恢复上传到 Confluence 的时候必须单独重命名,你可以通过下面说明的 3 个方法中选择一个进行操作: 选择 A - 通过文件名恢复附件 如果你知道你需要恢复的每一个文件名,尤其是你...

honeymose ⋅ 今天 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 今天 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 今天 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部