Golang map 三板斧第一式:快速上手
文章目录
- 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 三板斧第一式:快速上手相关推荐
- Golang map 三板斧第二式:注意事项
文章目录 1.默认初始值为 nil 2.range 顺序的随机性 3.引用传递 4.元素不可取址 5.并发读写问题 参考文献 map 使用起来非常方便,但也有些必须要注意的地方,否则可能会导致程序异常 ...
- 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 ...
- set | map | multiset | multimap 快速上手
map和set 1.关联式容器 序列式容器: 在初阶,我们接触过STL部分容器,如: vector.list.deque.forward_list(C++11)等,这些容器被称为序列式容器. 原因:这 ...
- Golang zap 快速上手
文章目录 1.zap 是什么? 2.zap 快速上手 1.安装 Zap 2.创建 Logger 3.配置 Logger 4.记录日志 5.输出日志 6.添加 Caller 信息 3.日志滚动 4.小结 ...
- Golang语言快速上手到综合实战(Go语言、Beego框架、高并发聊天室、豆瓣电影爬虫) 下载
下载Golang语言快速上手到综合实战(Go语言.Beego框架.高并发聊天室.豆瓣电影爬虫) 下载地址:请加QQ:397245854 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能 ...
- Golang logrus 快速上手
文章目录 1.logrus 是什么? 2.logrus 快速上手 1.安装 logrus 2.创建 Logger 对象 3.配置 Logger 对象 4.打印日志 5.输出日志 3.logrus 实现 ...
- GORM CRUD 10 分钟快速上手
文章目录 1.ORM 是什么 2.GORM 是什么 3.安装 4.连接 DB 5.创建数据表 6.增加(Create) 7.查询(Read) 按照主键查询 IN 查询 AND 条件 OR 条件 Gro ...
- Spark快速上手-WordCount案例
在此之前,我已经用MapReduce 框架实现了WordCount案例,接下来,我开始学习数据处理的另外一个非常重要的方法:Spark.首先,使用WordCount案例实现Spark快速上手. 创建M ...
- Forth Week :快速上手一门编程语言
快速上手一门编程语言 概述 图灵完备性语言 识别类型 学习路径 一 掌握该语言的背景 - 2h 二 掌握该语言的基本程序逻辑语法 - 1h 1.顺序结构 2.分支结构 1)if语句 2)switch ...
最新文章
- 难忘的一天——装操作系统(四)
- python怎么导入数据包_python – Scapy:如何在现有数据包中插入新层(802.1q)?
- Spring Boot 应用程序启动流程分析
- Oracle查询优化-03操作多个表
- 【位运算】代码中的常用操作
- Python 实例方法,类方法和静态方法的区别
- unity 模型渐变消失_Unity 雨水滴到屏幕效果
- java jigsaw_是从Java 8启动的Project Jigsaw吗?
- mysql查询很慢优化方法1
- 机器人动力学知识参考资料
- Windows下学习Objective-C 2.0
- java 获取数据源_J2EE java 获取数据源
- Java多线程系列---“JUC原子类”02之 框架
- 勒索软件再次降临 教育网为什么成为重灾区
- Tomcat日志配置
- 使用spring data JPA进行类目增删改查测试
- 如何提高下载速度(校园网怎么提高下载速度)
- 快手小筷子机器人_快手小快机器人设置 苹果手机小快机器人怎么弄
- [JavaScript]如何将www.xxx.com变为com.xxx.www
- 计算机科学引论2答案,计算机科学引论答案.doc
热门文章
- JavaScript总结摘要
- Python OpenCV学习笔记之:灰度图像的直方图计算
- ubuntu安装最新的rails-4.2.0
- 规划以及安装Exchange2007
- 10 个非常酷的基于jQuery的菜单效果插件
- Python实现代码行数统计工具
- sqlite 按拼音排序
- 【iOS】Swift3 Swift2 String转int,从TextField里面获取Int类型的数值
- 我的世界java骷髅马_我的世界:骷髅马材质更新,老MC教你获得骷髅马技巧,萌新:真好...
- 手把手教你用Spring Cloud和Docker构建微服务