声明与定义
    var a map[key的类型]value类型

    1. var a map[string]int //key为string类型,值为int类型
    2. var b map[int]string //key为int类型,值为string类型
    3. var c map[float32]string //key为float32类型,值为string类型

    map类型是一个Key-value的数据结构(类似php里的关联数组)
    map和切片一样是引用类型,必须在声明时赋值,或使用make()函数进行初始化
    map必须初始化才能使用,否则panic

    初始化

    1. //初始化方式一
    2. var a map[string]int = map[string]int{
    3. "小明":99,
    4. "小红":100,//最后一个key必须加逗号,否则编译不通过
    5. }
    6. //初始化方式2
    7. b := map[int]string{
    8. 1:"mike",
    9. 2:"jack",
    10. 3:"stvele",
    11. }
    12. //初始化方式3
    13. c := make(map[string]int,10)
    14. c["暑条"] = 10
    15. c["汉堡"] = 9

    判断当前map是否存在指定的key

    1. a := map[string]int{
    2. "小东":88,
    3. "小英":99,
    4. }
    5. b := "小明"
    6. //判断小明是否存在于变量a的map中
    7. c,ok :=a[b]
    8. if ok != true {
    9. fmt.Printf("key %s is not exist",b)
    10. }else {
    11. fmt.Printf("key %s is %d\n",b,c)
    12. }

    上面代码的判断就如下图所示,变量c就如同是a[b]的值,ok获取的就是key:小明
    所以11行代码判断出小明不存在于map中
    image.png

    遍历map方法:

    1. package main
    2. import(
    3. "time"
    4. "math/rand" //随机数包
    5. "time" //时间函数
    6. )
    7. fun main() {
    8. //初始化时间种子
    9. rand.Seed(time.Now().UnixNano())
    10. //初始化map
    11. a := make(map[string]int,1024)
    12. //使用for循环为map添加key与value
    13. for i := 0;i<128;i++ {
    14. key := fmt.Sprintf("stu%d",i) //将i从0到每次自增的值给变量key
    15. value := rand.Intn(1000)//每次循环生成一个小于1000的数
    16. //map赋值操作
    17. a[key] = value
    18. }
    19. //遍历map
    20. for key,value := range a{
    21. fmt.Printf("map[%s]=%d\n",key,value)
    22. }
    23. }

    打印结果:
    map[stu66]=361
    map[stu73]=407
    map[stu3]=695
    map[stu43]=615
    map[stu70]=398
    map[stu23]=676
    …….

    上面代码可以看到key与value都是使用rand包来随机生成

    删除map指定的key或所有key

    1. package main
    2. import(
    3. "fmt"
    4. )
    5. func main() {
    6. a := make(map[string]int,16)//初始化map
    7. //写入参数
    8. a["stu01"] = 1000
    9. a["stu02"] = 100
    10. a["stu03"] = 10
    11. fmt.Printf("before a=%#v\n",a) //打印删除前map
    12. delete(a,"stu02") //删除stu02
    13. fmt.Printf("after a=%#v\n",a) //打印删除后map
    14. //甚至使用for range方法遍历删除
    15. for key,_ := range a {
    16. delte(a,key)
    17. }
    18. fmt.Printf("the for range delete a=%#v\n",a)
    19. }

    上面代码中的for range方法中,删除map元素只会查找key。所以value使用匿名变量来代替