本系列前面的文章:

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. JVM 专题二十二:垃圾回收(六)垃圾回收器 (三)

    4. GC日志分析 4.1 日志分析 通过阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略. 内存分配与垃圾回收的参数列表-XX:+PrintGC:输出GC日志.类似-verbose: gc ...

  2. 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?

    https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...

  3. python 装饰器(七):装饰器实例(四)类装饰器装饰类以及类方法

    类装饰器装饰类方法 不带参数 from functools import wraps import types class CatchException: def __init__(self,orig ...

  4. ffmpeg常见用法总结

    1. 视频/音频剪切: ffmpeg -i input_file [-ss 00:00:10] [-t 00:00:20] output_file 去掉-ss指令表示从头开始 去掉-t指令表示剪切到结 ...

  5. bzoj3436小K的农场

    bzoj3436小K的农场 题意: n个数,知道m条关系:a-b≥c.a-b≤c或a==b.问是否存在满足所有关系的情况.n≤10000,m≤10000. 题解: 差分约束.因为只要求是否满足,因此最 ...

  6. bzoj2296【POJ Challenge】随机种子*

    bzoj2296[POJ Challenge]随机种子 题意: 求一个≤10^16的数,使这个数包含123456789且为x的倍数.x≤1000000. 题解: 16-6刚好等于10.因此我们可以直接 ...

  7. 使用nvm安装node,运行node报错 node: command not found

    1. 使用nvm安装node之后,直接运行node命令会报错 node: command not found 需要使用nvm ls  查询一下当前使用的安装的node版本,然后使用node use 版 ...

  8. Ethical Hacking - Web Penetration Testing(7)

    VULNS MITIGATION 1. File Upload Vulns - Only allow safe files to be updated. 2. Code Execution Vulns ...

  9. OSCP Learning Notes - WebApp Exploitation(1)

    Installing XSS&MySQL FILE Download the Pentester Lab: XSS and MySQL FILE from the following webs ...

  10. scratch编程体感游戏

    体感游戏有很多种,最常见的就是摄像头和声控了,今天我们要用scratch编写一系列的体感游戏!!!是不是很激动呢? 首先我们来编摄像头类的: No.1拳头打幽灵 挥动头就能打到幽灵了哟! 具体程序如下 ...