跳到主要内容
版本:2.9.x

基本介绍

支持并发安全开关选项的 map 容器,最常用的数据结构。该模块包含多个数据结构的 map 容器: HashMapTreeMapListMap

类型数据结构平均复杂度支持排序有序遍历说明
HashMap哈希表O(1)高性能读写操作,内存占用较高,随机遍历
ListMap哈希表+双向链表O(2)支持按照写入顺序遍历,内存占用较高
TreeMap红黑树O(log N)内存占用紧凑,支持键名排序及有序遍历
提示

此外, gmap 模块支持多种以哈希表为基础数据结构的常见类型 map 定义: IntIntMapIntStrMapIntAnyMapStrIntMapStrStrMapStrAnyMap

使用场景

任何 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 判定问题。
  • 使用方式:可以通过 NewKVMapWithCheckerNewListKVMapWithChecker 等构造函数,或在运行时调用 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 未写入

相关文档