C3c522c7bcb60618936824fc3e25221c
go实战-字典map速学

字典(map) 是键值对的集合,Go 语言的字典类型其实是一个哈希表(hash table)的实现,在这个实现中,键和元素的最大不同在于,前者的类型是受限的,后者可以任意。

map的声明
var map1 map[keytype]valuetype
var a map[string]string
var a map[int]string
var a map[string]map[string]string

map的相关操作

1、map是引用类型

func modify(a map[string]int) {
a["one"] = 134
}

2、slice类型的 map,可迭代

Items := make([]map[int][int], 5)
For I := 0; I < 5; i++ {
        items[i] = make(map[int][int])
}

3、map的排序
a. 先获取所有key,把key进行排序
b. 按照排序好的key,进行遍历
c、使用第三方https://github.com/cevaris/ordered_map,这个库使用二叉树实现有序map

举个例子

package main
import (
    "fmt"
    "sort"
)
func testMapSort() {
    var a map[int]int
    a = make(map[int]int, 5)
    a[8] = 10
    a[3] = 10
    a[2] = 10
    a[1] = 10
    a[18] = 10
    var keys []int
    for k, _ := range a {
        keys = append(keys, k)
        //fmt.Println(k, v)
    }
    sort.Ints(keys)
    for _, v := range keys {
        fmt.Println(v, a[v])
    }
}
func main() {
    testMapSort()
}
安全的map

golang 里的 map 并不是 concurrency-safe 的,也就是说,当多个 goroutine 对同一个 map 进行操作时,有可能发生冲突。很多时候我们都封装一层。比如:
```
type MapWithLock struct {
sync.RWMutex

top Created with Sketch.