Go语言--2go基础-->map

Go语言-->map

Go语言中的map详解

map是Go语言中基于键值对的无序集合,底层使用散列表实现。作为引用类型,其零值为nil,需显式初始化后才可使用。

定义与初始化

定义语法:

go 复制代码
map[KeyType]ValueType

初始化方式:

go 复制代码
// 方式1:使用make分配内存
scoreMap := make(map[string]int, 8) // 容量8(可选)

// 方式2:字面量初始化
userInfo := map[string]string{
    "username": "沙河小王子",
    "password": "123456",
}
基本操作
go 复制代码
// 添加/修改元素
scoreMap["张三"] = 90

// 访问元素
fmt.Println(scoreMap["小明"]) // 输出: 100

// 删除元素
delete(scoreMap, "小明")
键存在性检测
go 复制代码
value, ok := scoreMap["张三"]
if ok {
    fmt.Println("存在:", value) // 输出: 90
} else {
    fmt.Println("键不存在")
}
遍历
go 复制代码
// 遍历键值对
for k, v := range scoreMap {
    fmt.Printf("%s: %d\n", k, v)
}

// 仅遍历键
for k := range scoreMap {
    fmt.Println(k)
}

注意:遍历顺序与插入顺序无关,由哈希算法决定。

有序遍历

通过键排序实现有序遍历:

go 复制代码
keys := make([]string, 0, len(scoreMap))
for k := range scoreMap {
    keys = append(keys, k)
}
sort.Strings(keys) // 排序键切片

for _, k := range keys {
    fmt.Println(k, scoreMap[k])
}
复杂结构示例

1. 元素为map的切片

go 复制代码
mapSlice := make([]map[string]string, 3)
// 初始化内部map
mapSlice[0] = make(map[string]string)
mapSlice[0]["name"] = "小王子"

2. 值为切片的map

go 复制代码
sliceMap := make(map[string][]string)
// 安全追加元素
key := "中国"
if _, ok := sliceMap[key]; !ok {
    sliceMap[key] = make([]string, 0)
}
sliceMap[key] = append(sliceMap[key], "北京", "上海")
注意事项
  1. 未初始化 :操作nil映射会引发panic
  2. 并发安全 :非并发安全,需使用sync.Map或sync.RWMutex
  3. 内存优化 :预分配容量(make的第二个参数)可减少扩容开销

map操作
初始化
增删改
查询
遍历
make分配
字面量
单返回值
双返回值检测存在性
无序遍历
有序遍历需排序

相关推荐
夏幻灵5 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码5 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
苍何6 小时前
开源微信流 Windows,微信聊天记录,可以直接给 Codex 和 Obsidan 了
后端
bkspiderx7 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
代码什么用7 小时前
Spring基础使用
java·后端·spring
程序员老陆7 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光7 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
明月_清风8 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
码云数智-园园8 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
蜗牛互联网8 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端