以下是 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