当前位置:首页 > Go > 正文

Go语言映射详解(从零开始掌握map的声明与初始化)

Go语言基础教程 中,映射(map)是一个非常重要的内置数据结构,用于存储键值对(key-value pairs)。它类似于其他语言中的字典(Dictionary)或哈希表(Hash Table)。本文将手把手教你如何声明初始化一个 map,即使是编程小白也能轻松上手!

Go语言映射详解(从零开始掌握map的声明与初始化) Go语言映射  map声明 map初始化 Go语言基础教程 第1张

什么是映射(map)?

map 是 Go 语言中一种无序的、可变长的键值对集合。每个键(key)必须是唯一的,且类型必须支持相等比较(如 stringint 等),而值(value)可以是任意类型。

1. 声明一个 map

在 Go 中,你可以使用以下语法来声明一个 map

var 变量名 map[键类型]值类型  

例如,声明一个存储学生姓名(字符串)和年龄(整数)的 map

var students map[string]int  

⚠️ 注意:此时 students 的值为 nil,不能直接赋值!必须先进行初始化。

2. 初始化 map

有三种常见方式可以初始化一个 map

方法一:使用 make 函数

make 是 Go 语言中用于创建切片、映射和通道的内置函数。这是最常用的方式:

students := make(map[string]int)// 或者var students = make(map[string]int)  

现在你就可以安全地向 students 中添加数据了:

students["张三"] = 18students["李四"] = 20  

方法二:使用字面量直接初始化

如果你在创建时就知道一些初始数据,可以直接用字面量方式:

students := map[string]int{    "张三": 18,    "李四": 20,    "王五": 19,}  

方法三:先声明再用 make 初始化

适用于需要延迟初始化的场景:

var students map[string]intstudents = make(map[string]int)students["赵六"] = 21  

3. 常见操作示例

下面是一个完整的 Go语言映射 使用示例:

package mainimport "fmt"func main() {    // 使用字面量初始化 map    scores := map[string]int{        "数学": 95,        "英语": 88,        "物理": 92,    }    // 添加新元素    scores["化学"] = 89    // 修改已有元素    scores["英语"] = 90    // 打印整个 map    fmt.Println("所有成绩:", scores)    // 遍历 map    for subject, score := range scores {        fmt.Printf("%s: %d 分\n", subject, score)    }}  

4. 注意事项

  • map 是引用类型:当 map 被赋值或作为参数传递时,实际上传递的是指向底层数据结构的指针。
  • nil map 不能赋值:未初始化的 map(即 nil map)不能添加元素,否则会 panic。
  • 并发不安全:多个 goroutine 同时读写同一个 map 会导致运行时错误,需使用 sync.Map 或加锁。

总结

通过本教程,你已经掌握了 Go语言映射 的基本用法,包括如何进行 map声明map初始化。无论是使用 make 还是字面量方式,都能灵活创建满足需求的键值对集合。希望这篇 Go语言基础教程 能帮助你打下坚实的基础!

继续练习吧!尝试自己写一个程序,用 map 统计一段文本中每个单词出现的次数。