全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在Golang中使用map存储键值对_创建、访问和遍历Map

Go语言map是无序键值对集合,需声明后make初始化;键必须支持==比较(如string、int),不可用切片、map或函数;遍历顺序随机,线程不安全,nil map读写会panic。

Go语言中的map是无序的键值对集合,必须先声明再使用(不能像切片那样直接字面量赋值给未声明变量),且键类型必须支持==比较(如stringintbool、指针等,但不能是切片、map或函数)。

创建Map:三种常用方式

推荐显式初始化,避免nil map导致运行时panic:

  • 声明+make初始化(最常用):
    ages := make(map[string]int)
  • 字面量初始化(带初始值)
    colors := map[string]string{"red": "#ff0000", "blue": "#0000ff"}
  • 声明后赋值(不推荐用于空map)
    var scores map[string]int
    scores = make(map[string]int) // 必须make,否则为nil

访问和修改Map元素

通过键名访问值,语法简洁,但需注意“不存在的键”会返回零值,不报错:

  • 读取值age := ages["Alice"] → 若"Alice"不存在,age0int零值)
  • 安全读取(判断是否存在)
    if age, ok := ages["Bob"]; ok { fmt.Println("Bob is", age) }
    其中okbool,仅当键存在时为true
  • 添加/更新元素ages["Charlie"] = 30(键存在则覆盖,不存在则插入)
  • 删除元素delete(ages, "Alice")(删除不存在的键无副作用)

遍历Map:用for-range,顺序不保证

Go中map遍历顺序是随机的(每次运行可能不同),如需固定顺序,需额外排序键:

  • 基础遍历(键+值)
    for name, age := range ages { fmt.Printf("%s: %d\n", name, age) }
  • 只遍历键
    for name := range ages { fmt.Println(name) }
  • 只遍历值
    for _, age := range ages { fmt.Println(age) }(用_忽略键)
  • 按字母序遍历(需先收集并排序键)
    var keys []string
    for k := range ages { keys = append(keys, k) }
    sort.Strings(keys)
    for _, k := range keys { fmt.Printf("%s: %d\n", k, ages[k]) }

注意事项与常见陷阱

使用map时几个关键细节容易出错:

  • nil map不可写也不可读(除len和cap外):未make的map是nil,直接赋值会panic;len(nilMap)返回0,是安全的
  • map是引用类型,但不是线程安全的:多个goroutine同时读写需加锁(如sync.RWMutex)或使用sync.Map(适用于读多写少场景)
  • 结构体作为键需所有字段可比较
    type Key struct{ A int; B string }
    m := make(map[Key]bool)

    但若含切片字段则非法 ❌
  • 不要用float64作键:浮点数精度问题可能导致预期外的不相等,建议转为字符串或整数表示


# go  # golang  # go语言  # app  # 键值对  # red  # String  # if  # sort  # for  # printf  # 字符串  # 结构体  # bool  # int  # 指针  # 引用类型  # Struct  # 线程 


相关文章: c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何用已有域名快速搭建网站?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  佛山网站制作系统,佛山企业变更地址网上办理步骤?  太原网站制作公司有哪些,网约车营运证查询官网?  如何选择建站程序?包含哪些必备功能与类型?  制作证书网站有哪些,全国城建培训中心证书查询官网?  如何基于PHP生成高效IDC网络公司建站源码?  制作网站怎么制作,*游戏网站怎么搭建?  免费视频制作网站,更新又快又好的免费电影网站?  如何通过网站建站时间优化SEO与用户体验?  Android自定义listview布局实现上拉加载下拉刷新功能  建站之星如何修改网站生成路径?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  广州营销型建站服务商推荐:技术优势与SEO优化解析  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  网站制作壁纸教程视频,电脑壁纸网站?  如何在阿里云香港服务器快速搭建网站?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何在服务器上配置二级域名建站?  如何用VPS主机快速搭建个人网站?  官网网站制作腾讯审核要多久,联想路由器newifi官网  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  建站之星后台密码遗忘如何找回?  建站之星如何助力企业快速打造五合一网站?  建站主机解析:虚拟主机配置与服务器选择指南  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  建站之星在线客服如何快速接入解答?  建站之星如何通过成品分离优化网站效率?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  移民网站制作流程,怎么看加拿大移民官网?  建站主机服务器选购指南:轻量应用与VPS配置解析  图册素材网站设计制作软件,图册的导出方式有几种?  如何快速搭建高效简练网站?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何快速登录WAP自助建站平台?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  存储型VPS适合搭建中小型网站吗?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何通过FTP空间快速搭建安全高效网站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  SQL查询语句优化的实用方法总结  建站之星后台管理如何实现高效配置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。