二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Shell编程

  • Go编程笔记

  • 前端编程笔记

  • Go学习笔记

    • 基础部分

      • 基础知识
      • 数据类型
      • fmt的格式化输入输出
      • 运算符
      • 流程控制
      • 认识函数
      • 包的操作
      • 项目工程-在同级目录
      • 指针(pointer)
      • 数组(array)
      • 切片(slice)
      • 字典(map)
        • 1,概述。
        • 2,map 的使用。
        • 3,map 的赋值。
        • 4,map 的遍历。
        • 5,map 删除。
        • 6,map 做函数参数。
      • 结构体(struct)
      • 匿名组合
      • 方法
      • 接口
      • error接口
      • panic
      • recover
      • 字符串操作
      • 字符串转换
      • 正则表达式
      • JSON处理
      • 文件的操作
      • goroutine
      • channel
      • select
      • sync-lock锁
      • 网络概述
      • Socket编程
      • 发文件与聊天室
      • http编程
      • 爬虫实战
      • 单元测试了解
    • web框架

    • orm框架

  • Vue-21年学习笔记

  • Vue-22年重学笔记

  • 编程世界
  • Go学习笔记
  • 基础部分
二丫讲梵
2021-07-09
目录

字典(map)

文章发布较早,内容可能过时,阅读注意甄别。

# 1,概述。

map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定 key,对应的 value 可以迅速定位。

map 这种数据结构在其他编程语言中也称为字典(Python)、hash 和 HashTable 等。

Go 语言中的 map(映射、字典)是一种内置的数据结构,它是一个无序的key-value对的集合,比如以身份证号作为唯一键来标识一个人的信息。

m_29efd94e3554aeeb5fbf87150d8cab28_r

map 的格式为:

map[keyType]valueType
1

在一个 map 里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键,使用这些类型会造成编译错误:

	dict := map[ []string]int{} //err,invalid map key type []string
1

map 值可以是任意类型,没有限制。map 里所有键的数据类型必须是相同的,值也必须相同,但是键和值的数据类型可以不相同。

注意:map 是无序的,我们无法决定它的返回顺序,所以,每次打印结果的顺序有可能不同。

# 2,map 的使用。

package main

import "fmt"

func main() {
	//定义一个变量,类型为map
	var m1 map[int]string
	fmt.Println("m1 = ", m1)
	fmt.Println("len = ", len(m1))

	//可以通过make创建
	m2 := make(map[int]string)
	fmt.Println("m2 = ", m2)
	fmt.Println("len = ", len(m2))

	//可以指定长度,如果没有数据,那么长度依旧为0
	m3 := make(map[int]string, 10)
	fmt.Println("m3 = ", m3)
	fmt.Println("len = ", len(m3))

	//可以指定长度,如果数据超过设定长度,那么会自动扩容
	m4 := make(map[int]string, 2)
	m4[1] = "aa"
	m4[2] = "bb"
	m4[3] = "cc"
	fmt.Println("m4 = ", m4)
	fmt.Println("len = ", len(m4))

	//直接初始化,键需要时唯一的
	m5 := map[int]string{1: "a", 2: "b", 3: "c"}
	fmt.Println("m5 = ", m5)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 3,map 的赋值。

package main

import "fmt"

func main() {
	m := map[int]string{1: "mike", 2: "yoyo"}
	fmt.Println("m = ", m)
	//赋值,如果已经存在的key值,那么将会修改其内容
	m[1] = "aaa"
	fmt.Println("m = ", m)
	//如果给不存在的key赋值,那么将会追加内容
	//追加内容的时候,map会自动扩容,与append类似
	m[4] = "bbb"
	fmt.Println("m = ", m)

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 4,map 的遍历。

package main

import "fmt"

func main() {
	m := map[int]string{1: "mike", 2: "yoyo", 3: "nana"}
	//第一个返回值为key,第二个返回值为value,遍历结果是无序的
	for key, value := range m {
		fmt.Printf("%d===>%s\n", key, value)
	}

	//如何判断一个key值是否存在,通过 value, ok
	//第一个返回值为key所对应的value,第二个返回值为key是否存在的条件,存在ok则为true
	value, ok := m[1]
	if ok == true {
		fmt.Println("m[1] = ", value)
	} else {
		fmt.Println("该key不存在")
	}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 5,map 删除。

package main

import "fmt"

func main() {
	m := map[int]string{1: "mike", 2: "yoyo", 3: "nana"}
	fmt.Println("m = ", m)
	//通过delete函数进行删除

	delete(m, 1) //表示删除key为1的数据
	fmt.Println("m = ", m)
}
1
2
3
4
5
6
7
8
9
10
11
12

# 6,map 做函数参数。

package main

import "fmt"

func test(m map[int]string) {
	delete(m, 1)
}

func main() {
	m := map[int]string{1: "mike", 2: "yoyo", 3: "nana"}
	fmt.Println("m = ", m)

	test(m) //在函数内删除某个key
	fmt.Println("m = ", m)

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
微信 支付宝
#go
上次更新: 2024/07/04, 22:40:37
切片(slice)
结构体(struct)

← 切片(slice) 结构体(struct)→

最近更新
01
睡着的人不关灯
06-12
02
学习周刊-总第215期-2025年第24周
06-12
03
学习周刊-总第214期-2025年第23周
06-05
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式