go map (映射-类似其它语言的集合)

StevenQin · · 3405 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

map介绍

  • mapkey-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合。

基本语法

  • var map的变量名 map(关键字)[keyType]valueType

1、key可以是什么类型

golang中的map可以是多种类型,比如 bool,数字,string,指针,channel(管道),还可以是只包含前面几个类型的 接口,结构体,数组,
通常是 int,string

  • slice map function 不可做为key的数据类型。

2、valueType可以是什么类型

valueType的类型和key基本一样,通常为:数字(整数,浮点数),string,map,struct

map的声明

    var a map[string]string
    var a map[string]int
    var a map[int]string
    //a 的key是string类型,value是map类型。
    var a map[string]map[string]string

声明是不会分配内存,初始化要用make,分配内存后才能赋值和使用

    var a map[string]string
    //使用map前,需要先make,make的作用就是分配内存空间。
    a = make(map[string]string, 10) //10代表10对k-v的空间
    //key不可以重复,key相同的话,后面的覆盖前面
    a["no1"] = "宋江"
    a["no2"] = "吴用"
    a["no1"] = "武松"
    a["no3"] = "林冲"
    //map中是无序的k-v
    fmt.Println(a)
  • 以上代码的说明
    1、map在使用前一定要make。
    2、map的key是不能重复的。相同的话,后面覆盖前面。
    3、map的value可以相同。
    4、map的key-value是无序的。

map的使用方式

1、方式1:先声明,再make,再赋值

    //第一种方式: 先声明再 make
    var a map[string]string
    //使用map前,需要先make,make的作用就是分配内存空间。
    a = make(map[string]string, 10) //10代表10对k-v的空间
    //key不可以重复,key相同的话,后面的覆盖前面
    a["no1"] = "宋江"
    a["no2"] = "吴用"
    a["no1"] = "武松"
    a["no3"] = "林冲"
    //map中是无序的k-v
    fmt.Println(a)

2、方式2:声明的时候直接 make

    //第二种方式 声明的时候 make 用到类型推导
    cities := make(map[string]string)
    cities["no1"] = "北京"
    cities["no2"] = "天津"
    cities["no3"] = "上海"

    fmt.Println(cities)

3、方式3:声明的时候直接赋值

    //第三种方式 声明,直接赋值 用到类型推导
    heroes := map[string]string{
        "hero1": "宋江",
        "hero2": "林冲",
        "hero3": "武松",
    }

    heroes["hero4"] = "卢俊义"

    fmt.Println(heroes)

案例:

我们要存放三个学生的信息,每个学生有namesexs的信息
思咱:map [string]map[string]string (一对多)

    studentMap := make(map[string]map[string]string)
    //value 类型是map,所以还要 make
    studentMap["stu01"] = make(map[string]string, 3)
    studentMap["stu01"]["name"] = "tom"
    studentMap["stu01"]["sex"] = "男"
    studentMap["stu01"]["add"] = "北京长安街"

    studentMap["stu02"] = make(map[string]string, 3)
    studentMap["stu02"]["name"] = "mary"
    studentMap["stu02"]["sex"] = "女"
    studentMap["stu02"]["add"] = "上海陆家嘴"

    fmt.Println(studentMap)
    fmt.Println(studentMap["stu02"])
    fmt.Println(studentMap["stu02"]["add"])

map的增删改查操作

  • map的增加和更新:
map["key"] = value 

key不存在就是增加,存在就是更新


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:StevenQin

查看原文:go map (映射-类似其它语言的集合)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3405 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传