goframe之gmap

GoFrame 的 `gmap` 是一个为 Go 语言提供的并发安全的 map 容器模块,它包含多种数据结构的 map 容器,如 `HashMap`、`TreeMap` 和 `ListMap`。以下是 `gmap` 的一些关键特性和使用方法:

### 关键特性

1. **并发安全**:`gmap` 默认支持并发操作,但也提供了选项来关闭并发安全特性,以提升性能或简化操作。
2. **多种数据结构**:提供 `HashMap`(哈希表)、`TreeMap`(红黑树)、`ListMap`(哈希表+双向链表)等,每种结构都有其特定的性能特点和使用场景。
3. **性能优异**:与 Go 语言标准库中的 `sync.Map` 相比,`gmap` 在性能上有更出色的表现,并且功能更为丰富。
4. **有序遍历**:`ListMap` 支持按照写入顺序遍历,而 `TreeMap` 支持键名排序及有序遍历。
5. **丰富接口**:`gmap` 提供了丰富的接口,如 `Set`、`Get`、`Remove`、`Contains`、`Size`、`Keys`、`Values` 等,以及批量操作和迭代器功能。

### 使用方法

以下是 `gmap` 的一些基本操作示例:

```go
import (
    "fmt"
    "github.com/gogf/gf/v2/container/gmap"
)

func main() {
    // 创建一个并发安全的 gmap 实例
    m := gmap.New()

    // 设置键值对
    for i := 0; i < 10; i++ {
        m.Set(i, i)
    }

    // 批量设置键值对
    m.Sets(map[interface{}]interface{}{
        10: 10,
        11: 11,
    })

    // 查询是否存在特定的键
    fmt.Println(m.Contains(1))

    // 查询键对应的值
    fmt.Println(m.Get(1))

    // 删除键值对
    m.Remove(9)

    // 批量删除键值对
    m.Removes([]interface{}{10, 11})

    // 获取当前所有键名列表
    fmt.Println(m.Keys())

    // 获取当前所有键值列表
    fmt.Println(m.Values())

    // 当键值不存在时,写入给定的默认值
    fmt.Println(m.GetOrSet(100, 100))

    // 删除键值对,并返回对应的键值
    fmt.Println(m.Remove(100))

    // 遍历 map
    m.Iterator(func(k interface{}, v interface{}) bool {
        fmt.Printf("%v:%v ", k, v)
        return true
    })

    // 清空 map
    m.Clear()

    // 判断 map 是否为空
    fmt.Println(m.IsEmpty())
}
```

### 性能测试

`gmap` 在性能上进行了优化,提供了与 Go 原生 `map` 和 `sync.Map` 不同的性能特点。例如,在某些场景下,`gmap` 的 `Set` 和 `Get` 操作在基准测试中表现出更低的延迟和更少的内存分配。

`gmap` 是 GoFrame 框架中众多基础组件之一,它通过提供高效的并发安全数据结构,帮助开发者在处理并发数据时更加得心应手。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值