本系列前面的文章:

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函数可以获取mapkey的数量:

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的使用的更多相关文章

  1. Go语言入门系列(五)之指针和结构体的使用

    Go语言入门系列前面的文章: Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 1. 指针 如果你使用过C或C++,那你肯定对指针这个概念 ...

  2. Go语言入门系列(六)之再探函数

    Go语言入门系列前面的文章: Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 Go语言入门系列(五)之指针和结构体的使用 在Go语言入门系列(二)之基础语法总结这篇文章中已经 ...

  3. C语言高速入门系列(四)

    C语言高速入门系列(四) C语言数组 ---------转载请注明出处:coder-pig 贴心小提示:假设图看不清晰可右键另存为,应该就非常清晰了; 注意上面的代码都要自己过一遍哦! 本节引言: 经 ...

  4. 【Go语言入门系列】(七)如何使用Go的方法?

    [Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...

  5. 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用

    [Go语言入门系列]前面的文章: [保姆级教程]手把手教你进行Go语言环境安装及相关VSCode配置 [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞 ...

  6. 【Go语言入门系列】(八)Go语言是不是面向对象语言?

    [Go语言入门系列]前面的文章: [Go语言入门系列](五)指针和结构体的使用 [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? 1. Go是面向对象的语言吗? 在[ ...

  7. 【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口

    [Go语言入门系列]前面的文章: [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? 1. 引入例子 如果你使用 ...

  8. [转]C# 互操作性入门系列(四):在C# 中调用COM组件

    传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...

  9. spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护

    在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...

随机推荐

  1. 数据库04 /多表查询、pymysql模块

    数据库04 /多表查询.pymysql模块 目录 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 2. 连表查询 2.1 inner join 内连接 2.2 left join 左连接 ...

  2. 机器学习实战基础(二十五):sklearn中的降维算法PCA和SVD(六) 重要接口,参数和属性总结

    到现在,我们已经完成了对PCA的讲解.我们讲解了重要参数参数n_components,svd_solver,random_state,讲解了三个重要属性:components_, explained_ ...

  3. AI芯片

    课程作业,正好自己也在学深度学习,正好有所帮助,做了深度学习的AI芯片调研,时间比较短,写的比较仓促,大家随便看看 近年来,深度学习技术,如卷积神经网络(CNN).递归神经网络(RNN)等,成为计算机 ...

  4. Quartz.Net系列(十三):DateBuilder中的API详解

    1.DateOf.ToDayAt.TomorrowAt DateOf:指定年月日时分秒 public static DateTimeOffset DateOf(int hour, int minute ...

  5. 我为什么不再推荐 RxJava

    本文转自作者: W_BinaryTree 链接:juejin.im/post/5cd04b6e51882540e53fdfa2,如有侵权,可删除 距离上一次更新也有一段时间了,其实这篇文章我早就想写, ...

  6. python发送邮件插件

    github链接:https://github.com/573734817pc/SendEmailPlug-in.git 说明: 1.该插件功能为发送邮件. 2.基于python编写. 3.使用的时候 ...

  7. C/C++中的 if(指针变量) 和 if(!指针变量)

    目录 if(指针变量) 代码演示 if(指针变量) 解读代码 if(!指针变量) 解读代码 总结 替代方案.推荐写法!!!!! if(指针变量) 当把一个指针作为条件表达式时,所要判断的条件实际上就是 ...

  8. linux : 新服务器部署项目要做的事

    环境:阿里云服务器两台,一台web,一台db,系统centos7. 用户用外网访问web server ,web server 再去访问db server. 1 阿里云控制台进入系统2 SSH进入系统 ...

  9. zabbix自定义监控(当会话登录超过三个就报警)

    安装过程在此省略. 1.agent端去修改配置文件 2.调用自定义内容 vim /etc/zabbix/zabbix_agentd.d/login.conf UserParameter=login-u ...

  10. static关键字和final关键字

    static关键字和final关键字 static(静态) 作用 用来修饰属性.方法.代码块.内部类 static修饰属性 表示静态变量(类变量) 按是否使用static修饰,属性的分类 静态属性 当 ...