• map


    • map以散列表方式存储键值对集合

    • map中每个元素都是键值对

    map[key]Value
    • key是操作map的唯一标准.可以通过key对map中元素进行增加/删除/修改/查看

    • key是唯一的,添加重复的key会覆盖之前的元素.

    • map是值类型,只声明时为空指针(nil)

        var m map[string]int
        fmt.Println(m == nil) //输出:true
        fmt.Printf("%p", m)   //输出:0x0
    • map读写数据时并不是并发安全的,可以结合RWMutex保证并发安全(RWMutex在后面讲解)

    实例化map的几种方式

    • 使用make函数实例化一个没有初始值的map

        m := make(map[string]string)
        fmt.Println(m==nil)//输出:false
        fmt.Printf("%p", m)//输出:内存地址
    • 可以在声明map时直接给map赋初始值.注意初始值在一行和在多行写时的语法区别

      • map中元素键值对语法满足: key:value

      • key和value的类型必须和map[key]value类型严格对应

        m := map[string]string{"name": "smallming", "address": "北京海淀"}
        m1 := map[string]string{
            "name":     "smallming",
            "addresss": "北京海淀",
        }
        fmt.Println(m, m1)

    操作map中的元素

    • 使用key判断,如果key不存在向map中新增数据,如果key存在会覆盖map中元素

        m := make(map[string]int)
        m["money"] = 5
        fmt.Println(m) //输出:map[money:5]
        m["money"] = 6
        fmt.Println(m) //map[money:6]
    • Go语言标准库中提供了对map元素删除的函数,使用顶层delete()即可完成删除

      • 如果key存在执行删除元素

      • 如果key不存在,map中内容不变,也不会有错误

        m := make(map[string]int)
        m["money"] = 5
        delete(m, "没有的key")
        fmt.Println(m) //输出:map[money:5]
        delete(m, "money")
        fmt.Println(m) //输出:map[]
    • 获取map中指定key对应的值

      • 使用:map变量[key]获取key对应的值

      • 如果key不存在返回map[key]Value中Value类型的默认值.例如:Value是string类型就返回""

      • 返回值可以是一个,也可以是两个.

        • 一个表示key对应的值

        • 两个分别表示:key对应的值和这个key是否存在

        m := map[string]string{"name": "smallming", "address": "北京海淀"}
        fmt.Println(m["name"]) //输出:smallming
        fmt.Println(m["age"])  //输出:空字符串
        value, ok := m["age"]
        fmt.Println(value, ok) //输出:空字符串 false
    • 如果希望把map中所有元素都遍历,可以使用for结合range实现
        m := map[string]string{"name": "smallming", "address": "北京海淀"}
        //range遍历map时返回值分别表示key和value
        for key, value := range m {
            fmt.Println(key, value)
        }
  • 相关阅读:
    Java入门3.2---线程池
    Java入门3.1---多线程
    打开ppt报"powerpoint无法加载mathtype加载项"错误
    LATEX排版总结
    casbin 权限系统
    Go netpoll I/O 多路复用构建原生网络模型之源码深度解析
    使用winsw包装服务将nginx包装为Windows服务
    Node.js 的模块系统
    一文读懂 babel7 的配置文件加载逻辑
    vue-cli是什么?和 webpack是什么关系?
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/12092239.html
Copyright © 2020-2023  润新知