Skip to content

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")
}