基本介绍
支持并发安全开关选项的 map 容器,最常用的数据结构。该模块包含多个数据结构的 map 容器: HashMap、 TreeMap 和 ListMap。
| 类型 | 数据结构 | 平均复杂度 | 支持排序 | 有序遍历 | 说明 |
|---|---|---|---|---|---|
HashMap | 哈希表 | O(1) | 否 | 否 | 高性能读写操作,内存占用较高,随机遍历 |
ListMap | 哈希表+双向链表 | O(2) | 否 | 是 | 支持按照写入顺序遍历,内存占用较高 |
TreeMap | 红黑树 | O(log N) | 是 | 是 | 内存占用紧凑,支持键名排序及有序遍历 |
提示
此外, gmap 模块支持多种以哈希表为基础数据结构的常见类型 map 定义: IntIntMap、 IntStrMap、 IntAnyMap、 StrIntMap、 StrStrMap、 StrAnyMap。
使用场景:
任何 map/哈希表/关联数组使用场景,尤其是并发安全场景中。
使用方式:
import "github.com/gogf/gf/v2/container/gmap"
接口文档:
https://pkg.go.dev/github.com/gogf/gf/v2/container/gmap
NilChecker 与 typed nil 支持
- 功能简介:从泛型版本开始,
gmap为泛型字典类型(如KVMap[K, V]、ListKVMap[K, V])提供了NilChecker函数,用于自定义“哪些值应当被视为 nil”,主要用于解决包含指针、接口等类型时的 typed nil 判定问题。 - 使用方式:可以通过
NewKVMapWithChecker、NewListKVMapWithChecker等构造函数,或在运行时调用RegisterNilChecker注册一个func(V) bool判定函数,懒加载/条件写入方法(如GetOrSet*系列)在真正写入前会先调用该函数,当返回true时通常不会写入该键值对。 - 兼容性:如果未设置
NilChecker,则保持与历史版本一致,默认使用any(v) == nil进行判定,typed nil 的行为不会发生变化。
示例:
type Student struct {
Name string
}
// 将 *Student(nil) 视为“无值”,不会写入 map
m := gmap.NewListKVMapWithChecker[int, *Student](func(s *Student) bool {
return s == nil
}, true)
v := m.GetOrSetFuncLock(1, func() *Student {
return nil
})
fmt.Println(v == nil) // true
fmt.Println(m.Contains(1)) // false,key 未写入
相关文档
📄️ 字典类型-基本使用
GoFrame框架下gmap模块的基本使用方法,包括并发安全特性的开关操作,键值对的设置、查询和删除,以及数据结构的有序遍历、序列化与反序列化等内容,并提供了详细的代码示例与执行结果。
📄️ 字典类型-性能测试
针对字典类型的性能进行详细测试和分析。通过对GoFrame框架中的gmap与标准库sync.Map的性能比较,揭示在并发安全与非并发安全不同场景下的效率表现。包括不同类型map的性能基准测试,如HashMap、ListMap和TreeMap,提供开发者优化应用程序的实时参考。
📄️ 字典类型-方法介绍
GoFrame框架中AnyAnyMap的各种方法,包括创建、克隆、迭代、设置、删除和合并等操作。同时,还提供了代码示例以帮助理解这些方法的使用方式确保代码的并发安全性,更详细内容可参考GoFrame框架文档。