目录

声明与初始化

使用 map


计算机科学中最有用的数据结构之一就是哈希表。 许多散列表实现存在不同的属性,但通常它们提供快速查找,添加和删除。Go提供了一个内置的map 类型,去实现一个哈希表。

声明与初始化

声明 一个 map 类型像这样:

map[keyType]valueType

键(key)的类型可以是任意可比较的类型,值(value)的类型可以是任意类型,甚至是另一个 map 类型

下面的变量 m 是一个字符串键到int值的映射:

var m map[string]int

Map类型是引用类型,像指针或切片一样,所以上面的m值是nil; 它没有指向一个初始化的map。 当读取像上面声明的空map时返回为nil,但试图写入上面这样的空map 时将导致运行错误; 不要这样做。 要先初始化map,请使用内置的make函数:

m = make(map[string]int)

make函数将分配并初始化一个散列 map 数据结构,并返回指向它的指针。该数据结构的细节是运行时的实现细节,并不是由语言本身指定的。 在本文中,我们将重点介绍地图的使用,而不是它们的实现。

使用 map

Go 提供了一种大家熟悉的语法去使用 map.

以下语句将设置 字符串 为"route"的key 映射 到值为66 的value:

m["route"] = 66

以下语句检索key 为 "route" 的值, 并将它赋值给新的变量 i :

i := m["route"]

以下语句 如果请求的 key 不存在,我们将返回value Type  的空值。例子中情况下,值类型为 int, 因此值为 0:

j := m["root"]

j==0

以下语句 使用内置的 len 函数返回map 的长度(多少个已赋值的 key )

n := len(m)

以下语句 使用内置的delete 函数来删除  map 的一条映射:

delete(m, "route")
fmt.Println(len(m))
// 0

当你删除一个不存在的 key 时,它不会做执行任何操作( 不会报错)
以下语句 一个有两个的返回值用来测试 是否 存在该key:

i, ok  := m["route"]

在这个语句中,第一个值 i 被分配到 key 为“route”映射的值。如果该 key 不存在,返回值类型的空值. 第二个值 ok 是一个 bool 类型,如果该 key 存在于map中,则为 true, 如果没有,则为false。
以下语句 如果你要在不检索值的情况下,测试一个 key , 可以用 下划线 代替第一个变量:

_, ok  := m["route"]

以下语句 遍历一个 map:

for key, value := range m {fmt.Println("key:", key, "value:", value)
}

以下语句 使用一些数据初始化数据:

commits := map[string]int{"rsc": 3711,"r":      2148,"gri":  1908,"adg":  912,
}

相同的语法可以用来初始化一个空映射, 它在功能上与使用 make 函数一样:

m = map[string]int{}

golang map 初始化 和 使用相关推荐

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

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

  2. map初始化_您可曾这样初始化一个map呢?

    最近作者打球,不小心把手给弄伤了,虽然学到了一点Java冷知识,但最近不能像以往那样,啪啦啪啦写几百个字了,需要悠着点,所以今天来点轻松哒- 我有个怪癖,喜欢看别人写的代码,然后找出不尽如人意的地方, ...

  3. Golang map源码浅析

    设计概述 runtime/map.go文件开头描述了map的设计要点. map是一个哈希表(hashtable): 数据被组织成bucket数组,每个bucket最多存8个键值对: 哈希值的低位用于选 ...

  4. Golang——map集合初始化、键值操作、map作为函数参数的使用

    map是一种无序的键值对集合,键是不允许重复的,map是通过hash实现的 map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值 引用类型不能作为key map的创建: 格式1 ...

  5. c++ map初始化同时赋值_Golang入门教程——map篇

    点击上方蓝字,和我一起学技术. 今天是golang专题的第7篇文章,我们来聊聊golang当中map的用法. map这个数据结构我们经常使用,存储的是key-value的键值对.在C++/java当中 ...

  6. c++ map初始化_Go学习每日一问(18)-map元素查找

    每次学习并整理一个Golang的知识点,每天进步一点点.今天学习下go中的一个知识点:map元素查找 日省吾身 1.下面代码中 A B 两处应该怎么修改才能顺利编译? func main() { va ...

  7. 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 ...

  8. Golang map 三板斧第一式:快速上手

    文章目录 1.简介 2.申明与定义 3.遍历 4.增删改查 参考文献 1.简介 map 是经常被使用的内置 key-value 型容器,是一个同类型元素的无序组,元素通过另一类型唯一键进行索引. 其键 ...

  9. Golang map源码详解

    Golang的map是用哈希表实现的,在实现性能上非常优秀,这里会主要对map创建.插入.查询.删除以及删除全部的源码做详解,刻意避开了扩容以及迭代相关的代码,后续会用一个新的文章去讲述.Golang ...

最新文章

  1. vue 引入的方法 用在template_?【有手就行】轻松打造属于自己的Vue工程化脚手架工具...
  2. Akka的好用例[关闭]
  3. CSP认证201512-2 消除类游戏[C++题解]:模拟
  4. 跟小静读《jQuery权威指南》——目录
  5. 访问SAP C4C Business Configuration工作中心时遇到的错误信息
  6. 老兵传奇:聊聊我在华为的20年
  7. 码云 GVP 项目 SequoiaDB 完成 C 轮数千万美元融资
  8. VMware vCloud与Zend Server实现PHP应用程序自动化交付
  9. java -Date、DateFormat、Calendar类
  10. 单片机学校实训老师上课需要的工具以及源码分享
  11. date字段 http 头文件_http头文件信息
  12. cmd net 命令
  13. 计算机专业 论文检索,精选】计算机专业文献检索论文参考选题
  14. 作业(数组)---运行环境winTC(二)
  15. 史上最强!PC时代的20位英雄(组图)
  16. 计算机培训有假期吗,教师假期计算机培训心得体会
  17. json文件批量转换xml
  18. 二维码 编码原理简介
  19. 什么软件测试苹果手机循环电池,如何检查iPhone电池的电池循环次数,看完你就明白了...
  20. 华硕wl 700ge 路由器 刷OpenWrt 过程记录

热门文章

  1. ADO.NET Entity Framework如何:通过每种类型一个表继承以定义模型(实体框架)
  2. OpenStack 的单元测试
  3. 用 Flask 来写个轻博客 (2) — Hello World!
  4. 反激式开关电源变压器设计
  5. Keil仿真出现Can not read register xx while CPU is running
  6. 电路设计中三极管和MOS管做开关用时的区别
  7. 收集国内著名互联网公司前端/UED部门的blog,方便学习交流
  8. Newtonsoft.Json高级用法
  9. Oracle Open World 2012信息汇总贴
  10. 简单实现ibatis的物理分页