Go 语言入门指南:基础语法和常用特性解析(五 映射详解) | 青训营

107 阅读3分钟

介绍

映射(Map)是Go语言中一种非常有用的数据结构,它提供了一种键值对的存储方式,用于存储一系列无序的键值对,类似于其他编程语言中的字典或关联数组。本文将详细介绍Go语言中的映射,包括创建、操作、遍历以及一些使用映射的最佳实践。

1. 创建映射

在Go语言中,映射使用map关键字来定义。映射的基本语法如下:

mapName := make(map[keyType]valueType)

其中,keyType是键的数据类型,valueType是值的数据类型。例如:

ages := make(map[string]int)  // 创建一个字符串到整数的映射
scores := make(map[int]float64) // 创建一个整数到浮点数的映射

2. 操作映射

2.1 添加和更新元素

通过键来给映射添加或更新元素,可以使用类似数组赋值的方式:

ages["Alice"] = 28   // 添加 "Alice" 到映射 ages,年龄为 28
ages["Bob"] = 30     // 添加 "Bob" 到映射 ages,年龄为 30
ages["Alice"] = 29   // 更新 "Alice" 的年龄为 29

2.2 删除元素

使用delete函数可以删除映射中的元素:

delete(ages, "Bob")  // 删除映射 ages 中的 "Bob" 元素

2.3 查找元素

使用映射的键来查找对应的值:

age, found := ages["Alice"] // 在映射 ages 中查找 "Alice" 的年龄
if found {
    fmt.Println("Alice's age:", age)
} else {
    fmt.Println("Alice not found")
}

3. 遍历映射

迭代映射里的所有值和迭代数组和切片一样,使用range关键字可以遍历映射中的键值对:

for name, age := range ages {
    fmt.Printf("%s is %d years old\n", name, age)
}

4.在函数间传递映射

在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递映射给一个函数,并对这个映射做了修改,所有对这个映射的引用都会察觉到这个修改。

5. 映射的注意事项

5.1 映射是引用类型

映射是引用类型,这意味着当将一个映射赋值给另一个变量时,它们会共享同一份数据,对其中一个映射的修改会影响到另一个。

5.2 无序性

映射是无序的,这意味着映射中的元素没有固定的顺序,不能对键值对进行排序。即使按顺序保存,每次迭代的时候顺序也不一样。无序的原因是映射的实现使用了散列表。

5.3 零值

当尝试访问一个映射中不存在的键时,将会返回该值类型的零值。因此,在使用映射之前,最好通过第2.3节中的方法检查是否存在键。

6. 映射的应用场景

映射在Go语言中被广泛用于许多场景,包括:

  • 存储配置信息
  • 缓存数据
  • 统计词频
  • 构建字典

7. 总结

Go语言的映射是一种非常实用的数据结构,提供了灵活的键值对存储方式。你可以使用映射来存储、检索和操作具有键值对结构的数据。映射的增长没有容量限制,而且传递给函数的成本很小,不会复制底层的数据结构。掌握映射的基本操作和注意事项,将有助于开发者在编写Go程序时更加高效和准确地使用这一重要的数据结构。