Documentation
¶
Index ¶
- type Map
- func (m *Map[K, V]) Delete(key K)
- func (m *Map[K, V]) Load(key K) (value V, ok bool)
- func (m *Map[K, V]) LoadAndDelete(key K) (value V, loaded bool)
- func (m *Map[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool)
- func (m *Map[K, V]) Range(f func(key K, value V) bool)
- func (m *Map[K, V]) Store(key K, value V)
- type Pool
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Map ¶
type Map[K comparable, V any] struct { // contains filtered or unexported fields }
Map 是对 sync.Map 的一个泛型封装 要注意,K 必须是 comparable 的,并且谨慎使用指针作为 K。 使用指针的情况下,两个 key 是否相等,仅仅取决于它们的地址 而不是地址指向的值。可以参考 Load 测试。 注意,key 不存在和 key 存在但是值恰好为零值(如 nil),是两码事
func (*Map[K, V]) Delete ¶
func (m *Map[K, V]) Delete(key K)
Delete 删除键值对
Example ¶
var m Map[string, int]
m.Store("key1", 123)
val, ok := m.Load("key1")
if ok {
fmt.Printf("key1 = %d\n", val)
}
m.Delete("key1")
_, ok = m.Load("key1")
if !ok {
fmt.Println("key1 已被删")
}
Output: key1 = 123 key1 已被删
func (*Map[K, V]) Load ¶
Load 加载键值对
Example ¶
var m Map[string, int]
m.Store("key1", 123)
val, ok := m.Load("key1")
if ok {
fmt.Println(val)
}
Output: 123
func (*Map[K, V]) LoadAndDelete ¶
LoadAndDelete 加载并且删除一个键值对
Example ¶
var m = Map[string, *User]{}
_, loaded := m.LoadAndDelete("Tom")
fmt.Println(loaded)
m.Store("Tom", nil)
val, loaded := m.LoadAndDelete("Tom")
if loaded {
fmt.Printf("key=Tom, val=%v 被删除\n", val)
}
m.Store("Tom", &User{Name: "Tom"})
val, loaded = m.LoadAndDelete("Tom")
if loaded {
fmt.Printf("key=Tom, val=%v 被删除\n", val)
}
Output: false key=Tom, val=<nil> 被删除 key=Tom, val=&{Tom} 被删除
func (*Map[K, V]) LoadOrStore ¶
LoadOrStore 加载或者存储一个键值对
Example ¶
var m = Map[string, *User]{}
_, loaded := m.LoadOrStore("Tom", &User{Name: "Tom"})
// 执行存储
if !loaded {
fmt.Println("设置了新值 Tom")
}
_, loaded = m.LoadOrStore("Tom", &User{Name: "Tom-copy"})
// Tom 这个 key 已经存在,执行加载
if loaded {
fmt.Println("加载旧值 Tom")
}
_, loaded = m.LoadOrStore("Jerry", nil)
// 执行存储,注意值是 nil
if !loaded {
fmt.Println("设置了新值 nil")
}
val, loaded := m.LoadOrStore("Jerry", &User{Name: "Jerry"})
// Jerry 这个 key 已经存在,执行加载,于是把原本的 nil 加载出来
if loaded {
fmt.Printf("加载旧值 %v", val)
}
Output: 设置了新值 Tom 加载旧值 Tom 设置了新值 nil 加载旧值 <nil>
Click to show internal directories.
Click to hide internal directories.