首页 > 其他分享 >Golang学习笔记_16——Map

Golang学习笔记_16——Map

时间:2024-12-22 17:31:29浏览次数:7  
标签:Map map fmt 16 Alice Golang Println myMap age

Golang学习笔记_13——数组
Golang学习笔记_14——切片
Golang学习笔记_15——range


文章目录


Map

1. 介绍

在Go语言中,map 是一种内置的数据结构,用于存储键值对(key-value pairs)。map 提供了快速的查找、插入和删除操作,使得它在处理需要快速访问的数据时非常高效。

2. 声明和初始化

// 声明未初始化的map
var myMap map[string]int

// 使用 make 函数初始化
myMap := make(map[string]int)

// 使用字面量初始化
myMap := map[string]int{
    "Alice": 30,
    "Bob":   25,
}

3. 类型

map 的键和值可以是任意类型(除了函数类型、map类型和切片类型的值不能作为键)。

键必须是可比较的(即可以使用 ==!= 操作符比较的类型)。

常见的键类型包括整数、浮点数、字符串、布尔值等

值类型则可以是任意类型

4. 基本操作

4.1 插入更新
myMap["Tom"] = 25
myMap["Bob"] = 100
4.2 访问值
value, exists := myMap["Alice"]
if exists {
    fmt.Println("Alice's age is", value)
} else {
    fmt.Println("Alice's age is not found")
}

输出结果

Alice's age is 30
4.3 删除
delete(myMap, "Bob")
4.4 遍历
for key, value := range myMap {
    fmt.Println(key, value)
}

遍历 map 的顺序是随机的,因为 map 不保证键值对的存储顺序

5. 注意事项

  1. 并发访问
    map 不是并发安全的,即多个协程(goroutine)不能同时读写同一个 map。如果需要在多个协程之间共享 map,应该使用 sync.Map 或通过其他同步机制(如互斥锁)来保护对 map 的访问。
  2. 容量
    map 在Go语言中会自动扩展容量,程序员无需手动管理。然而,这并不意味着可以无限制地向 map 中添加元素,当 map 变得非常大时,性能可能会受到影响。
  3. nil map
    未初始化的 mapnil,对其进行任何操作(如插入、查找、删除)都会导致运行时错误。因此,在使用 map 前必须确保它已被初始化。

6. 示例

func map_demo() {
	// 初始化 map
	myMap := make(map[string]int)

	// 插入键值对
	myMap["Alice"] = 30
	myMap["Bob"] = 25

	// 访问值
	age, exists := myMap["Alice"]
	if exists {
		fmt.Println("Alice's age is", age)
	} else {
		fmt.Println("Alice's age is not found")
	}

	// 更新键值对
	myMap["Alice"] = 31

	// 删除键值对
	delete(myMap, "Bob")

	// 遍历 map
	for key, value := range myMap {
		fmt.Println(key, value)
	}

	// 使用字面量初始化 map
	anotherMap := map[string]string{
		"name": "Charlie",
		"city": "New York",
	}

	// 访问 anotherMap 的值
	fmt.Println("Name:", anotherMap["name"])
	fmt.Println("City:", anotherMap["city"])
}

测试方法

func Test_map_demo(t *testing.T) {
	map_demo()
}

输出结果

=== RUN   Test_map_demo
Alice's age is 30
Alice 31
Name: Charlie
City: New York
--- PASS: Test_map_demo (0.00s)
PASS

标签:Map,map,fmt,16,Alice,Golang,Println,myMap,age
From: https://blog.csdn.net/LuckyLay/article/details/144621110

相关文章

  • 备战16届蓝桥杯
    这实际上是一道初中数学题,已知长宽的比值,还有水平方向和竖直方向的速度比值。要想返回原点,那么水平方向上的总路程比上竖直方向上的总路程一定要满足长宽比。不用在意题目上说的反弹,反弹后只是轨迹变了。不影响结果。最后的返回值是水平总路程的平方加上竖直方向总路程的平......
  • dvwa靶场学习—1、VMware16虚拟机安装win10系统
    参考:https://blog.csdn.net/u013097500/article/details/130922242?ops_request_misc=%257B%2522request%255Fid%2522%253A%25229f57538a8985bd22b94ddc3c4206a75e%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=9f57538a8985bd22b94ddc3c4......
  • MyBatis之mappers详解
    要点环境准备因为从数据库中拿到的数据需要转换为实体类对象,所以需要定义一个pojo来接受和转换数据实体类(pojo)创建完成之后需要创建mapper接口,mapper接口就相当于原来的daomapper接口的命名和实体类名对应,因为myBatis有面向接口编程的功能,所以每当我们调用接......
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验五----土地整治(超超超详细!!!)
    土地整治        土地整治是指在一定的区域内,按照土地利用总体规划确定的目标和用途,采取工程和生物措施,以农用地为主要对象,同时视区域内居民点、工矿废弃地和未利用地等适宣性况生费行综合整治,并以增加耕地面积、提高耕地质量、建设高标准基本农田为目的,改善农......
  • MapReduce的词频统计应用
    MapReduce在云计算大数据中的词频统计应用文章目录MapReduce在云计算大数据中的词频统计应用前言一、MapReduce的基本流程二、词频统计的具体实现1、准备数据文件2、创建MapReduce项目3、创建Mapper类4、创建Reducer类5、创建Driver类6、运行作业并查看结果总结前......
  • Golang中的Map是怎么遍历的
    在Golang中,遍历map的常见方法是使用for...range循环。map是无序的键值对集合,因此遍历map时,每次迭代访问的键值对顺序可能不同。以下是一个遍历map的示例:packagemainimport"fmt"funcmain(){//创建一个mapmyMap:=map[string]int{"ap......
  • 8086汇编(16位汇编)学习笔记00.DEBUG命令使用解析及范例大全
    转载自:https://bpsend.net/thread-99-1-1.html启动Debug,它是可用于测试和调试MS-DOS可执行文件的程序。Debug[[drive:][path]filename[parameters]]参数[drive:][path]filename指定要测试的可执行文件的位置和名称。parameters指定要测试的......
  • 最大似然估计 (MLE) 和最大后验估计 (MAP) 背后的直觉
    文章目录一、说明二、一些浅显的预测问题三、MLE背后的数学3.1MLE的物理原理示例3.2反思录3.3MLE的数学公式整理四、MAP背后的数学原理五、何时使用MLE或MAP?六、结语一、说明  在数据分析中,分析师不同,给出的方案也不同,这就导致对同一事务的分析,都是“正......
  • Golang学习笔记_13——数组
    Golang学习笔记_10——SwitchGolang学习笔记_11——指针Golang学习笔记_12——结构体文章目录数组1.定义2.访问和修改3.多维数组4.计算数组长度5.数组作为函数参数6.遍历7.数组的内存表示源码数组Go语言中的数组是一种具有固定长度、相同类型元素的集......
  • Golang学习笔记_14——切片
    Golang学习笔记_11——指针Golang学习笔记_12——结构体Golang学习笔记_13——数组文章目录切片1.定义2.创建3.基本操作4.动态性5.子切片6.数组和切片7.注意8.高级用法源码切片Go语言中的切片(slice)是一种非常强大且灵活的数据结构,它基于数组,但提供了......