Appearance
MAP
- Map 是一种无序的键值对的集合。
声明
- map 集合使用前一定先要 make 初始化
- map 键值对是无序的
- map key 值是不重复的
go
//方式1:通过make定义
var map1 map[int]string = make(map[int]string, 10)
map1[1] = "张三"
map1[2] = "王五"
fmt.Println(map1)
//方式2:通过make定义 不指定长度
var map2 map[int]string = make(map[int]string)
map2[1] = "张三"
fmt.Println(map2)
//方式3: 键值对初始化
map3 := map[int]string{
1: "张三",
2: "王五",
}
fmt.Println(map3)元素操作
go
// 增删改
var map4 map[int]string = make(map[int]string)
map4[3] = "王五" //增加
map4[3] = "李四" //修改
delete(map4, 3) //删除
fmt.Println(map4)
// 判断是否存在
v, ok := map4[4]
if ok {
fmt.Println("存在",v)
}else{
fmt.Println("不存在")
}
// 遍历1
for i := 0; i < len(map4); i++ {
fmt.Println(map4[i])
}
// 遍历2
for key, value := range map4 {
fmt.Println(key, value)
}sync.map
- 是并发安全的映射(哈希表),属于 sync 包,专门用于读多写少的并发场景。
go
package main
import (
"fmt"
"sync"
)
var sMap sync.Map
func main() {
// 添加元素
sMap.Store("k1", "value1")
sMap.Store("k2", "value")
// 修改元素
sMap.Store("k1", "newValue")
// 更新元素
sMap.Swap("k1", "newValue2")
// 获取元素
v1, ok := sMap.Load("k1")
if ok {
fmt.Println(v1)
}
// 遍历
sMap.Range(func(key, value interface{}) bool {
fmt.Println(key, value)
return true
})
// 删除元素
sMap.Delete("k2")
}