2024/1/18大约 2 分钟
创建 Map
map 是一种键值映射表,通过 key 获取对应的 value
map 的声明方式
map[KeyType]ValueTypeKeyType 为 key 的数据类型 , ValueType 为 value 的数据类型
例子
// 声明 map
var m map[string]int
// 使用 make 初始化 map
m = make(map[string]int)
// 使用 make 初始化 map, 并设置容量
// m = make(map[string]int, 10)
// 设置值
m["path"] = 66
// 输出值
fmt.Println(m["path"])遍历 Map
使用 range 遍历 map
例子
package main
import "fmt"
func main() {
	// 初始化 Map
	var dataMap map[string]string
	dataMap = make(map[string]string)
    // 也可以这样初始化
	//dataMap := map[string]string{}
    // 添加键值
	dataMap["first"] = "first value"
	dataMap["second"] = "second value"
	dataMap["third"] = "third value"
	fmt.Println("print key and value: ")
	// 使用 range 遍历 key value
	for key, val := range dataMap {
		fmt.Printf("key: %s  -  value: %s \n", key, val)
	}
	fmt.Println("print key: ")
	// 使用 range 遍历 key
	for key := range dataMap {
		fmt.Printf("key: %s \n", key)
	}
	fmt.Println("print value: ")
	// 使用 range 遍历 value
	for _, val := range dataMap {
		fmt.Printf("Value: %s \n", val)
	}
}
// 结果
// print key and value:
// key: third  -  value: third value
// key: first  -  value: first value
// key: second  -  value: second value
// print key:
// key: first
// key: second
// key: third
// print value:
// Value: first value
// Value: second value
// Value: third value删除键值
在字典中删除键值需要使用 delete() 方法
例子
package main
import "fmt"
func main() {
	// 初始化 Map
	var dataMap map[string]string
	dataMap = make(map[string]string)
    // 也可以这样初始化
	//dataMap := map[string]string{}
	dataMap["first"] = "first value"
	dataMap["second"] = "second value"
	dataMap["third"] = "third value"
	fmt.Println(dataMap)
    // 删除键值
	delete(dataMap, "first")
	fmt.Println(dataMap)
}
// 结果:
// map[first:first value second:second value third:third value]
// map[second:second value third:third value]判断 key 是否存在
例子
package main
import "fmt"
func main() {
	// 初始化 Map
	var dataMap map[string]string
	dataMap = make(map[string]string)
	dataMap["first"] = "first value"
	dataMap["second"] = "second value"
	dataMap["third"] = "third value"
	// 判断 key 是否存在
	if val, ok := dataMap["first"]; ok {
		fmt.Println(val)
	} else {
		fmt.Println("key not exists")
	}
	if val, ok := dataMap["fourth"]; ok {
		fmt.Println(val)
	} else {
		fmt.Println("key not exists")
	}
}获取 Map 长度
使用 len() 获取 Map 的长度
len(dataMap)并发
在并发操作下 Map 不是线程安全的,可以使用官方的 sync.Map{} 解决