分享
  1. 首页
  2. 文章

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

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

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏