Go语言入门系列(四)之map的使用
本系列前面的文章:
1. 声明
map是一种映射,可以将键(key
)映射到值(value
),格式为:map[keyType]valueType
。
声明一个map并初始化它,使用key:value
进行初始化:
var scores = map[string]int {"数学":100, "语文":90, "Go":100}
如果不想直接初始化,可以先声明再使用,注意这样需要使用make
函数初始化后才能使用:
var scores map[string]int
scores = make(map[string]int)
为什么这样声明需要使用make
函数?
map
的零值是nil map
,没有键,也不能添加键。
var m map[string]int //声明一个m map,它现在默认是nil
fmt.Println(m) //map[]
m["A"] = 1 //报错:assignment to entry in nil map
所以为了不让该map
不是nil
,需要使用make
初始化:
var m map[string]int //nil
m = make(map[string]int) //初始化
m["A"] = 1 //添加元素
fmt.Println(m) //map[A:1]
当然,方便的短变量声明方式也能用:
m := map[string]int {"A":1, "B":2}
或者
m := make(map[string]int)
m["A"] = 1
m["B"] = 2
2. 增删改查
(增)增加键值对:
scores["数学"] = 100 //向scores这个map添加了键为“数学”,值为100的数据
scores["语文"] = 90
(删)删除键值对:
delete(scores, "语文")
(改)修改键值对和增加键值对的语法相同(当key
不存在时为增加,当key
存在时为修改):
scores["语文"] = 10
(查)使用key
可以查找到对应的value
,会返回两个值,第一个是key
对应的value
,第二个是布尔值(如果key
存在,是true
;否则是false
)。如果查找的key
不存在,则会返回value
类型的“零值”:
score, exist := scores["数学"] //使用两个返回值
fmt.Println(score, exist) //100 true
score1 := scores["语文"] //使用一个返回值
fmt.Println(score1) //90
score2, exist2 := scores["Java"] //查找不存在的key
fmt.Println(score2, exist2) //0 false
3. 其他用法
和slice
一样,map
也是引用类型,则意味着,如果有几个map
同时指向一个底层map
,其中一个map
改变某个键值对,那么其他的也会做出同样的改变(因为底层map
变了)。
package main
import "fmt"
func main() {
map0 := make(map[string]string) //底层map0
map0["name"] = "XingXiaoguan" //增加一个键值对
//map1 map2 引用map0
map1 := map0
map2 := map0
fmt.Println(map0["name"], map1["name"], map2["name"]) //都是XingXiaoguan
map1["name"] = "XingRenGuanXue" //改变map1的name对应的值
fmt.Println(map0["name"], map1["name"], map2["name"]) //全部变为XingRenGuanXue
}
使用len
函数可以获取map
中key
的数量:
keyNum := len(scores) //获取scores这个map中key的数量
map
是无序的,所以其返回的元素顺序可能每次都不同。
可以使用range
关键字遍历map
,这里range
返回的第一个值是key
,第二个值是value
:
//遍历scores map
for key, value := range scores {
fmt.Println(key, value)
}
输出:
数学 100
语文 90
如有错误,还请指正。
4. 关于我
点击这里认识我 。 (^o^)/
Go语言入门系列(四)之map的使用的更多相关文章
- Go语言入门系列(五)之指针和结构体的使用
Go语言入门系列前面的文章: Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 1. 指针 如果你使用过C或C++,那你肯定对指针这个概念 ...
- Go语言入门系列(六)之再探函数
Go语言入门系列前面的文章: Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 Go语言入门系列(五)之指针和结构体的使用 在Go语言入门系列(二)之基础语法总结这篇文章中已经 ...
- C语言高速入门系列(四)
C语言高速入门系列(四) C语言数组 ---------转载请注明出处:coder-pig 贴心小提示:假设图看不清晰可右键另存为,应该就非常清晰了; 注意上面的代码都要自己过一遍哦! 本节引言: 经 ...
- 【Go语言入门系列】(七)如何使用Go的方法?
[Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...
- 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用
[Go语言入门系列]前面的文章: [保姆级教程]手把手教你进行Go语言环境安装及相关VSCode配置 [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞 ...
- 【Go语言入门系列】(八)Go语言是不是面向对象语言?
[Go语言入门系列]前面的文章: [Go语言入门系列](五)指针和结构体的使用 [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? 1. Go是面向对象的语言吗? 在[ ...
- 【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
[Go语言入门系列]前面的文章: [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? 1. 引入例子 如果你使用 ...
- [转]C# 互操作性入门系列(四):在C# 中调用COM组件
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护
在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...
随机推荐
- 数据库04 /多表查询、pymysql模块
数据库04 /多表查询.pymysql模块 目录 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 2. 连表查询 2.1 inner join 内连接 2.2 left join 左连接 ...
- 机器学习实战基础(二十五):sklearn中的降维算法PCA和SVD(六) 重要接口,参数和属性总结
到现在,我们已经完成了对PCA的讲解.我们讲解了重要参数参数n_components,svd_solver,random_state,讲解了三个重要属性:components_, explained_ ...
- AI芯片
课程作业,正好自己也在学深度学习,正好有所帮助,做了深度学习的AI芯片调研,时间比较短,写的比较仓促,大家随便看看 近年来,深度学习技术,如卷积神经网络(CNN).递归神经网络(RNN)等,成为计算机 ...
- Quartz.Net系列(十三):DateBuilder中的API详解
1.DateOf.ToDayAt.TomorrowAt DateOf:指定年月日时分秒 public static DateTimeOffset DateOf(int hour, int minute ...
- 我为什么不再推荐 RxJava
本文转自作者: W_BinaryTree 链接:juejin.im/post/5cd04b6e51882540e53fdfa2,如有侵权,可删除 距离上一次更新也有一段时间了,其实这篇文章我早就想写, ...
- python发送邮件插件
github链接:https://github.com/573734817pc/SendEmailPlug-in.git 说明: 1.该插件功能为发送邮件. 2.基于python编写. 3.使用的时候 ...
- C/C++中的 if(指针变量) 和 if(!指针变量)
目录 if(指针变量) 代码演示 if(指针变量) 解读代码 if(!指针变量) 解读代码 总结 替代方案.推荐写法!!!!! if(指针变量) 当把一个指针作为条件表达式时,所要判断的条件实际上就是 ...
- linux : 新服务器部署项目要做的事
环境:阿里云服务器两台,一台web,一台db,系统centos7. 用户用外网访问web server ,web server 再去访问db server. 1 阿里云控制台进入系统2 SSH进入系统 ...
- zabbix自定义监控(当会话登录超过三个就报警)
安装过程在此省略. 1.agent端去修改配置文件 2.调用自定义内容 vim /etc/zabbix/zabbix_agentd.d/login.conf UserParameter=login-u ...
- static关键字和final关键字
static关键字和final关键字 static(静态) 作用 用来修饰属性.方法.代码块.内部类 static修饰属性 表示静态变量(类变量) 按是否使用static修饰,属性的分类 静态属性 当 ...