美文网首页
golang语言map的并发和排序

golang语言map的并发和排序

作者: CodingCode | 来源:发表于2020-02-20 04:15 被阅读0次

golang语言map的并发和排序

  1. map的并发问题

golang缺省的map不是thread safe的,如果存在读写并发的使用场景,必须在外面使用lock机制。
包sync里面引入一个安全map;

type Map struct
func (m *Map) Store(key, value interface{})
func (m *Map) Load(key interface{}) (value interface{}, ok bool)
func (m *Map) Range(f func(key, value interface{}) bool)
func (m *Map) Delete(key interface{})

用法:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var m sync.Map

    m.Store("bb", 22)
    m.Store("cc", 33)
    m.Store("aa", 11)

    v, ok := m.Load("cc")
    fmt.Printf("%v: %v\n", v, ok)

    m.Delete("cc")

    m.Range(func(key, value interface{}) bool{
        fmt.Printf("[%v]=[%v]\n", key, value)
        return true
    })
}

运行结果如下:

33: true
[bb]=[22]
[aa]=[11]
  1. map排序的问题

golang官方说法map并不排序,不按key排序,也不按插入顺序排序,也就是说map是无序的,无法保证任何排序。
下面是一种常见的给map排序输出的办法:

m := map[string]int{"Alice": 23, "Eve": 2, "Bob": 25}

keys := make([]string, 0, len(m))
for k := range m {
        keys = append(keys, k)
}
sort.Strings(keys)

for _, k := range keys {
        fmt.Println(k, m[k])
}

相关文章

  • golang语言map的并发和排序

    golang语言map的并发和排序 map的并发问题 golang缺省的map不是thread safe的,如果存...

  • Go sync.Map

    map并发读线程安全,并发读写线程不安全。 sync.Map 读写分离 空间换时间 Map Golang1.6之前...

  • Golang的并发编程

    golang是为并发而生的语言。优雅的并发编程范式,完善的并发支持,出色的并发性能是golang区别于其他语言的一...

  • Golang之Map源码

    引用 深入 Go 的 Map 使用和实现原理 哈希表 深度解密Go语言之map Golang map 的底层实现 使用

  • Golang之Map源码解析

    在Golang情景中,Map主要分为两种:sync.Map和内置Map,两者主要区别是内置Map不支持并发读写,s...

  • (九)golang sync map 源码分析

    golang中的map是不支持并发操作的,golang推荐用户直接用读写锁对map进行保护,也有第三方类库使用分段...

  • 【实践】Golang的goroutine和通道的8种姿势

    前言 如果说php是最好的语言,那么golang就是最并发的语言。支持golang的并发很重要的一个是gorout...

  • 并发map --- sync map分析

    [TOC] 本文基于1.10源码分析如之前的文章可以看到,golang中的map是不支持并发操作的,golang推...

  • golang MPG并发模型

    golang MPG并发模型 以上这张图就是golang的mpg模型中各个元素的说明: M:物理线程,和其他语言中...

  • 10.map

    Go语言基础之map | Golang Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 ...

网友评论

      本文标题:golang语言map的并发和排序

      本文链接:https://www.haomeiwen.com/subject/xxdtqhtx.html