Go1.9 安全map用法
博客专区 > ChamPly 的博客 > 博客详情
Go1.9 安全map用法
ChamPly 发表于5个月前
Go1.9 安全map用法
  • 发表于 5个月前
  • 阅读 15
  • 收藏 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
粉丝 10
博文 42
码字总数 32506
×
ChamPly
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: