gmap 是 GoFrame 框架中的一个并发安全的 map 实现。该模块提供了对 map 数据结构的封装,使得在多协程并发操作时更加安全。gmap 模块提供的 gmap.Map 类型具有类似于 sync.Map 的功能,但也添加了一些额外的便捷方法。

以下是 gmap.Map 的基本介绍和用法:

1. 导入包
import "github.com/gogf/gf/container/gmap"

2. 创建和初始化

可以使用 gmap.New() 创建一个空的 gmap.Map 对象,也可以使用 gmap.NewFrom() 从现有的 map 初始化一个 gmap.Map。
// 创建一个空的 gmap.Map
m := gmap.New()

// 创建并初始化 gmap.Map
m = gmap.NewFrom(gmap.Map{
    "key1": "value1",
    "key2": "value2",
})

3. 添加、获取和删除元素

可以使用 Set 方法添加元素,Get 方法获取元素,Remove 方法删除元素。
m := gmap.New()

// 添加元素
m.Set("key1", "value1")
m.Set("key2", "value2")

// 获取元素
val, ok := m.Get("key1")
if ok {
    fmt.Println("Value:", val)
}

// 删除元素
m.Remove("key1")

4. 并发安全

gmap.Map 是并发安全的,可以在多个协程中安全地读写。
m := gmap.New()

// 使用 WaitGroup 等待协程完成
var wg sync.WaitGroup

// 启动多个协程并发写入
for i := 0; i < 10; i++ {
    wg.Add(1)
    go func(index int) {
        defer wg.Done()
        key := fmt.Sprintf("key%d", index)
        value := fmt.Sprintf("value%d", index)
        m.Set(key, value)
    }(i)
}

// 等待协程完成
wg.Wait()

5. 迭代

可以使用 Iterator 方法对 map 进行迭代。
m := gmap.NewFrom(gmap.Map{
    "key1": "value1",
    "key2": "value2",
})

// 迭代所有元素
m.Iterator(func(key, value interface{}) bool {
    fmt.Printf("Key: %s, Value: %s\n", key, value)
    return true
})

6. 其他方法

gmap.Map 还提供了一系列其他方法,如清空、判断是否包含某个键、获取键的列表等。
m := gmap.NewFrom(gmap.Map{
    "key1": "value1",
    "key2": "value2",
})

// 是否包含键
fmt.Println(m.Contains("key1"))

// 获取键的列表
keys := m.Keys()
fmt.Println("Keys:", keys)

// 清空 map
m.Clear()

gmap 模块为在多协程并发环境下安全地操作 map 提供了便捷的工具。


转载请注明出处:http://www.zyzy.cn/article/detail/7695/GoFrame