文章目录

  • 1.简介
  • 2.申明与定义
  • 3.遍历
  • 4.增删改查
  • 参考文献

1.简介

map 是经常被使用的内置 key-value 型容器,是一个同类型元素的无序组,元素通过另一类型唯一键进行索引。

其键可以是任何支持相等性操作符的类型, 如整数、浮点数、复数、字符串、指针、接口(只要其动态类型支持相等性判断)、结构以及数组。 因此键类型不能是函数、映射或切片,因为它们的相等性还未定义。当然,slice 和 map 的比较可以使用reflect.DeepEqual(sl0, sl1)reflect.DeepEqual(m0, m1)

与切片一样,映射也是引用类型。若将映射传入函数中,并更改该映射的内容,则修改对调用者同样可见。

使用示例:

package mainimport "fmt"func main() {nameAge := make(map[string]int)nameAge["bob"] = 18                     //增nameAge["tom"] = 16                     //增delete(nameAge, "bob")                  //删nameAge["tom"] = 19                     //改v := nameAge["tom"]                     //查fmt.Println("v=",v)v, ok := nameAge["tom"]                 //查,推荐用法if ok { fmt.Println("v=",v,"ok=",ok)}for k, v :=range nameAge {           //遍历fmt.Println(k, v)}
}

输出结果:

v= 19
v= 19 ok= true
tom 19

2.申明与定义

未初始化的 map 其零值为 nil,可以使用内建函数 make 定义一个 map 变量。

// 申明一个值为 nil 的 map 变量
var m map[T1]T2// 创建 0 容量的 map
var m = make(map[T1]T2)
var m = map[T1]T2{}// 创建指定容量的 map
var m = make(map[T]T2, hint)// 创建并初始化 map
var m = map[string]int {"dable" : 27,"cat" : 28,
}

注意: 在定义 map 时可以省略容量,超出容量时会自动扩容,但尽量提供一个合理的初始值。注意指定的容量只是一个提示,map 并没有一个具体的容量,所以我们无法使用 cap() 函数来获取一个 map 的容量。

// 错误示例
func main() {m := make(map[string]int, 100)println(cap(m))     // error: invalid argument m (type map[string]int) for cap
}

另外可以使用 len() 获取元素个数。键值对不存在时会自动添加,使用 delete() 可以删除某键值对。

3.遍历

(1)遍历所有 key。

// 方式一(推荐)
for k := range mapVar {...
}// 方式二
for k, _ := range mapVar {...
}

(2)遍历所有 value。

for _, v := range mapVar {...
}

(3)遍历所有 key 与 value。

for k, v := range mapVar {...
}

注意,map 在没有被修改的情况下,使用 range 多次遍历 map 时输出的 key 和 value 的顺序可能不同。这是 Go 语言的设计者们有意为之,在每次 range 时的顺序被随机化,旨在提示开发者们,Go 底层实现并不保证 map 遍历顺序稳定,请大家不要依赖 range 遍历结果顺序。Golang 官方博文对此有详细说明:Go maps in action。

4.增删改查

向 map 写入元素时,键值对不存在时会自动添加,键值存在时将被新值覆盖。使用 delete() 删除某键值对。

// 新增或修改
m["name"] = "wade"// 删除,key 不存在则啥也不干
delete(m, "name")// 三种查询方式
// key 不存在返回 value 类型的零值
v := m["name"]
v, ok := m["name"]
_, ok := m["name"]

参考文献

Map types-Language Specification
实效Go编程.映射
Go编程语言规范.映射类型

Golang map 三板斧第一式:快速上手相关推荐

  1. Golang map 三板斧第二式:注意事项

    文章目录 1.默认初始值为 nil 2.range 顺序的随机性 3.引用传递 4.元素不可取址 5.并发读写问题 参考文献 map 使用起来非常方便,但也有些必须要注意的地方,否则可能会导致程序异常 ...

  2. Golang map 三板斧第三式:实现原理

    文章目录 1.数据结构 1.1 简介 1.2 核心结构 1.3 数据结构图 2.实现机制 2.1 创建 2.2 增加或修改 2.3 删除 2.4 查找 2.5 迭代 2.5.1 hiter 2.5.2 ...

  3. set | map | multiset | multimap 快速上手

    map和set 1.关联式容器 序列式容器: 在初阶,我们接触过STL部分容器,如: vector.list.deque.forward_list(C++11)等,这些容器被称为序列式容器. 原因:这 ...

  4. Golang zap 快速上手

    文章目录 1.zap 是什么? 2.zap 快速上手 1.安装 Zap 2.创建 Logger 3.配置 Logger 4.记录日志 5.输出日志 6.添加 Caller 信息 3.日志滚动 4.小结 ...

  5. Golang语言快速上手到综合实战(Go语言、Beego框架、高并发聊天室、豆瓣电影爬虫) 下载

    下载Golang语言快速上手到综合实战(Go语言.Beego框架.高并发聊天室.豆瓣电影爬虫) 下载地址:请加QQ:397245854 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能 ...

  6. Golang logrus 快速上手

    文章目录 1.logrus 是什么? 2.logrus 快速上手 1.安装 logrus 2.创建 Logger 对象 3.配置 Logger 对象 4.打印日志 5.输出日志 3.logrus 实现 ...

  7. GORM CRUD 10 分钟快速上手

    文章目录 1.ORM 是什么 2.GORM 是什么 3.安装 4.连接 DB 5.创建数据表 6.增加(Create) 7.查询(Read) 按照主键查询 IN 查询 AND 条件 OR 条件 Gro ...

  8. Spark快速上手-WordCount案例

    在此之前,我已经用MapReduce 框架实现了WordCount案例,接下来,我开始学习数据处理的另外一个非常重要的方法:Spark.首先,使用WordCount案例实现Spark快速上手. 创建M ...

  9. Forth Week :快速上手一门编程语言

    快速上手一门编程语言 概述 图灵完备性语言 识别类型 学习路径 一 掌握该语言的背景 - 2h 二 掌握该语言的基本程序逻辑语法 - 1h 1.顺序结构 2.分支结构 1)if语句 2)switch ...

最新文章

  1. 难忘的一天——装操作系统(四)
  2. python怎么导入数据包_python – Scapy:如何在现有数据包中插入新层(802.1q)?
  3. Spring Boot 应用程序启动流程分析
  4. Oracle查询优化-03操作多个表
  5. 【位运算】代码中的常用操作
  6. Python 实例方法,类方法和静态方法的区别
  7. unity 模型渐变消失_Unity 雨水滴到屏幕效果
  8. java jigsaw_是从Java 8启动的Project Jigsaw吗?
  9. mysql查询很慢优化方法1
  10. 机器人动力学知识参考资料
  11. Windows下学习Objective-C 2.0
  12. java 获取数据源_J2EE java 获取数据源
  13. Java多线程系列---“JUC原子类”02之 框架
  14. 勒索软件再次降临 教育网为什么成为重灾区
  15. Tomcat日志配置
  16. 使用spring data JPA进行类目增删改查测试
  17. 如何提高下载速度(校园网怎么提高下载速度)
  18. 快手小筷子机器人_快手小快机器人设置 苹果手机小快机器人怎么弄
  19. [JavaScript]如何将www.xxx.com变为com.xxx.www
  20. 计算机科学引论2答案,计算机科学引论答案.doc

热门文章

  1. JavaScript总结摘要
  2. Python OpenCV学习笔记之:灰度图像的直方图计算
  3. ubuntu安装最新的rails-4.2.0
  4. 规划以及安装Exchange2007
  5. 10 个非常酷的基于jQuery的菜单效果插件
  6. Python实现代码行数统计工具
  7. sqlite 按拼音排序
  8. 【iOS】Swift3 Swift2 String转int,从TextField里面获取Int类型的数值
  9. 我的世界java骷髅马_我的世界:骷髅马材质更新,老MC教你获得骷髅马技巧,萌新:真好...
  10. 手把手教你用Spring Cloud和Docker构建微服务