大多数现代化的编程语言都有个类似map的概念,大意就是映射,Go语言也不能例外。
1. Golang里,map映射键到值,以猫哥的粗浅认识,map的作用类似于哈希表或者Python里的字典,只不过比后两者用得更广泛。
map在Golang里是一种数据类型,与Golang的结构体类似,map必须先声明“键值”类型,然后在使用之前必须用 make
来创建。来看个例子:
package main
import "fmt"
func main() {
//var m map[int]string 其实直接定义也可以的
m := make(map[int]string)
m[0]="cero"
m[1]="uno"
m[2]="dos"
fmt.Println(m)
}
#输出:
map[2:dos 0:cero 1:uno]
是不是类似哈希表?存储都是随机的。
2. 如果顶层类型只有类型名的话,可以在文法的元素中省略键名。不过键名不能取消。
package main
import "fmt"
type Person struct {
Name string
Age int
Gender string
}
var m1 = map[int]Person {
1: {"Li Lei", 14, "male"},
2: {"Han Meimei", 14, "female"},
}
func main() {
fmt.Println(m1)
}
#输出:
map[1:{Li Lei 14 male} 2:{Han Meimei 14 female}]
3. map的CRUD
3.1 新增和修改:
非常简单:m[key] = value
3.2 读取:
类似的,怎么都能想到 a := m[key]
3.3 查询:
elem, err = m[key] //err
3.4 删除:
delete(m, key)
3.5 一个map的CRUD例子:
package main
import "fmt"
func main() {
Grade := make(map[string]int)
Grade["Excellent"] = 100
fmt.Println("The value:", Grade["Excellent"])
Grade["Good"] = 90
fmt.Println("The value:", Grade["Good"])
Grade["Fail"] = 59
delete(Grade, "Fail")
fmt.Println("The value Fail:", Grade["Fail"])
Grade["pass"] = 60
if v, err := Grade["pass"]; err == true {
fmt.Println("The value:", v, "Present?", err)
}
}
#输出:
The value: 100
The value: 90
The value Fail: 0
The value: 60 Present? true
map还有更高级的用法,待下下....下回分解...