映射 - Go 语言学习笔记

245 阅读2分钟

概述

Go语言中的 映射(map)是一种内置的数据结构,是一个用于存储一系列无序的键值对的集合。

映射里基于键来存储值,键就像索引一样,指向与该键关联的值。

创建和初始化

1. 使用内置函数 make() 声明映射

map_variable := make(map[key_data_type]value_data_type)

// 创建一个映射,键的类型是string,值的类型是int
dict := make(map[string]int)

2. 使用映射字面量声明映射

// 创建一个映射,键和值的类型都是string
// 使用两个键值对初始化映射
dict := map[string]string{"Red": "#da1337", "Orange": "#e95a22"}

使用映射

1. 为映射赋值

键值对赋值给映射,是通过指定适当类型的键并给这个键赋一个值来完成的。

// 创建一个空映射,用来存储颜色以及颜色对应的十六进制代码
colors := map[string]string{}

// 将Red的代码加入到映射
colors["Red"] = "#da1337"

2. 对 nil 映射赋值运行会报错

// 通过声明映射创建一个 nil 映射
var colors map[string]string

// 将 Red 的代码加入到映射
colors["Red"] = "#da1337"

Runtime Error:
panic: runtime error: assignment to entry in nil map

3. 从映射获取值并判断键是否存在

// 获取键 Blue 对应的值
value, exists := colors["Blue"]
// 这个键存在吗?
if exists {
    fmt.Println(value)
}

4. 从映射获取值,并通过该值判断键是否存在

// 获取键 Blue 对应的值
value := colors["Blue"]

// 这个键存在吗?
if value != "" {
    fmt.Println(value)
}

5. 使用 range 迭代映射

// 创建一个映射,存储颜色以及颜色对应的十六进制
colors := map[string]string{
    "AliceBlue": "#f0f8ff",
    "Coral": "#ff7F50",
    "DarkGray": "#a9a9a9",
    "ForestGreen": "#228b22"
}

// 显示映射里的所有颜色
for key, value := range colors {
    fmt.Printf("key: %s Value: %s\n", key, value)
}

6. 从映射中删除一项

// 删除键为 Coral 的键值对
delete(colors, "Coral")

// 显示映射里的所有颜色
for key, value := range colors {
    fmt.Printf("key: %s Value: %s\n", key, value)
}

在函数间传递映射

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