【Go】Go语言中map的使用


不问你为何流眼泪
不在乎你心里还有谁
且让我给你安慰
不论结局是喜是悲
走过千山万水
在我心里你永远是那么美
既然爱了就不后悔
再多的苦我也愿意背
                     🎵 张信哲《爱如潮水》


Go语言中的map是一种内置的数据类型,它提供了一种存储键值对(key-value pairs)的集合的能力。map是一种非常有用的数据结构,允许你通过键(key)快速检索、更新或删除相应的值(value)。在其他编程语言中,这种数据结构可能被称为字典(Dictionaries)、哈希表(Hash tables)或者关联数组(Associative arrays)。

基本特性

动态大小:map的大小不是固定的,它可以根据需要动态地增长和缩小。
无序集合:map中的元素是无序的,这意味着你不能指望在迭代map时元素的顺序是一致的。
键值唯一性:map中的每个键都是唯一的,且与一个特定的值相关联。尝试插入一个已存在的键会覆盖其对应的值。

声明和初始化

可以使用make函数来创建一个map,或者使用map字面量来初始化它:

// 使用make函数创建map
var myMap = make(map[string]int)

// 使用map字面量初始化map
myMap := map[string]int{
    "one": 1,
    "two": 2,
    "three": 3,
}

操作

对map的基本操作包括添加、获取、更新和删除键值对:

  • 添加/更新:通过指定键和值来添加或更新键值对。

    myMap["four"] = 4 // 添加新的键值对
    myMap["one"] = 10 // 更新键"one"对应的值
    
  • 获取:通过键来获取对应的值。如果键不存在,将得到值类型的零值。

    value := myMap["two"] // 获取键"two"对应的值
    
  • 删除:使用内置的delete函数来删除键值对。

    delete(myMap, "three") // 删除键"three"对应的键值对
    
  • 检查键是否存在:在获取值的同时,可以检查键是否存在于map中。

    value, ok := myMap["three"] // ok将是false,因为键"three"已被删除
    

注意事项
当操作共享的map时,如在并发环境下,必须使用同步机制来避免竞态条件。标准库中的sync包提供了Mutex锁,可以用来保护map。
由于map是引用类型,当你将一个map赋值给另一个变量时,两者将指向内存中的同一个对象。因此,对一个map的修改会影响到所有引用了该map的变量。
Go语言的map是处理键值对数据的强大工具,灵活且易于使用。掌握它对于开发高效、可读性强的Go应用程序至关重要。

定义(创建)map有两种主要方式

  1. 使用 make 函数
    make 函数是创建map的最常用方法之一,特别是当你需要一个空的map,或者你不立即知道初始键值对时。使用 make 可以创建一个指定类型的空map。

    m := make(map[string]int)
    

    这里,m 是一个以字符串为键(key),整数为值(value)的map。初始时,m 是空的,没有任何键值对。

  2. 使用 map 字面量
    当你在创建map时已经知道一些或所有初始键值对,可以使用map字面量进行初始化。这种方式允许你在声明map的同时指定一组初始的键值对。

    m := map[string]int{
        "apple":  5,
        "banana": 10,
    }
    

    在这个例子中,m 是一个初始包含两个键值对的map:键 "apple" 对应的值是 5,键 "banana" 对应的值是 10。

比较和选择

使用 make 函数:适合当你需要一个空的map,或者你计划稍后添加键值对。这种方式提供了灵活性,允许你在运行时动态地向map中添加键值对。

使用 map 字面量:适合你已经知道一些或所有初始键值对时。这种方式使代码更简洁,初始化更直观,但如果你需要稍后添加更多键值对,仍然可以使用。

选择哪种方式主要取决于你的具体需求和场景。如果你事先不知道任何键值对,或者偏好动态添加它们,make是个好选择。如果你一开始就知道所有或部分键值对,字面量初始化会更简洁直观。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值