目标:什么是map?
什么是Map
Map 是一种无序的键值对的集合。
Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,遍历 Map 时返回的键值对的顺序是不确定的。
在获取 Map 的值时,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""。
Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。
!!!单纯的Map不是线程安全的,如果需要使用线程安全的使用(sync.map()方法)
示例1
// 案例
package main
import "fmt"
func main() {
// map是一个key(索引)和value(值)的无序集合,主要是查询方便o(1)
// map的2种初始化方式
// 1.花括号初始化
var courseMap = map[string]string{
"go": "go工程师",
"grpc": "grpc入门",
"gin": "gin深入理解",
}
// 取值
fmt.Println(courseMap["grpc"]) // grpc入门
// 入值
courseMap["mysql"] = "mysql原理"
fmt.Println(courseMap) // map[gin:gin深入理解 go:go工程师 grpc:grpc入门 mysql:mysql原理]
// 错误展示(当设置了一个Map但是没有初始化,系统就会报错)
//var courseMap2 map[string]string
//courseMap2["mysql"] = "mysql原理"
//fmt.Println(courseMap2) // 输出结果:panic: assignment to entry in nil map
// 2.make方法初始化(更为常用)
var courseMap3 = make(map[string]string, 10)
courseMap3["study"] = "学习Go语言"
fmt.Println(courseMap3) // map[study:学习Go语言]
}
Map循环
// 案例
package main
import "fmt"
func main() {
var courseMap = map[string]string{
"go": "go工程师",
"grpc": "grpc入门",
"gin": "gin深入理解",
}
// map 循环是无序的
for key, value := range courseMap {
fmt.Println(key, value)
}
fmt.Println("-----------")
for _, value := range courseMap {
fmt.Println(value)
}
fmt.Println("-----------")
for key := range courseMap {
fmt.Println(key, courseMap[key])
}
}
Map判断元素是否存在
// 案例
package main
import "fmt"
func main() {
var courseMap = map[string]string{
"go": "go工程师",
"grpc": "grpc入门",
"gin": "gin深入理解",
}
// 判断一个map里面是否存在该参数
courseMap["java"] = ""
d, ok := courseMap["java"]
if !ok {
fmt.Println("not ok")
} else {
fmt.Println("is set", d)
}
// 写法2
if d, ok := courseMap["java"]; !ok {
fmt.Println("not ok")
} else {
fmt.Println("is set", d)
}
// 运行结果:is set
}
Map删除
// 案例
package main
import "fmt"
func main() {
var courseMap = map[string]string{
"go": "go工程师",
"grpc": "grpc入门",
"gin": "gin深入理解",
}
delete(courseMap, "grpc")
delete(courseMap, "aaa") // 删除一个不存在的键值,不会报错
fmt.Println(courseMap) // 运行结果:map[gin:gin深入理解 go:go工程师 java: mysql:mysql原理]
}
Comments NOTHING