syncX

package
v2.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package syncX 提供并发安全的数据结构,是对标准库 sync 的扩展。

Package syncX 提供并发安全的数据结构,是对标准库 sync 的扩展。

Package syncX 提供并发安全的数据结构,是对标准库 sync 的扩展。

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type LimitPool

type LimitPool[T any] struct {
	// contains filtered or unexported fields
}

LimitPool 是对 Pool 的简单封装允许用户通过控制一段时间内对Pool的令牌申请次数来间接控制Pool中对象的内存总占用量

func NewLimitPool

func NewLimitPool[T any](maxTokens int, factory func() T) *LimitPool[T]

NewLimitPool 创建一个 LimitPool 实例 maxTokens 表示一段时间内的允许发放的最大令牌数 factory 必须返回 T 类型的值,并且不能返回 nil

func (*LimitPool[T]) Get

func (l *LimitPool[T]) Get() (T, bool)

Get 取出一个元素 如果返回值是 true,则代表成功借出对象(可能来自池或新建) 如果返回 false,表示已达到最大限制,无法借出更多对象

func (*LimitPool[T]) Put

func (l *LimitPool[T]) Put(t T)

Put 放回去一个元素

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 NewMap

func NewMap[K comparable, V any]() *Map[K, V]

NewMap 为了防止有时使用时忘记&取地址,所以又加了New构造

func (*Map[K, V]) Delete

func (m *Map[K, V]) Delete(key K)

Delete 删除键值对

func (*Map[K, V]) IsEmpty

func (m *Map[K, V]) IsEmpty() bool

IsEmpty 判断 Map 是否为空

  • true : Map 为空
  • false : Map 不为空

func (*Map[K, V]) Load

func (m *Map[K, V]) Load(key K) (value V, ok bool)

Load 加载键值对

func (*Map[K, V]) LoadAndDelete

func (m *Map[K, V]) LoadAndDelete(key K) (value V, loaded bool)

LoadAndDelete 加载并且删除一个键值对

func (*Map[K, V]) LoadOrStore

func (m *Map[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool)

LoadOrStore 加载或者存储一个键值对 true 代表是加载的,false 代表执行了 store

func (*Map[K, V]) LoadOrStoreFunc

func (m *Map[K, V]) LoadOrStoreFunc(key K, fn func() (V, error)) (actual V, loaded bool, err error)

LoadOrStoreFunc 是一个优化,也就是使用该方法能够避免无意义的创建实例。 如果你的初始化过程非常消耗资源,那么使用这个方法是有价值的。 它的代价就是 Key 不存在的时候会多一次 Load 调用。 当 fn 返回 error 的时候,LoadOrStoreFunc 也会返回 error。

func (*Map[K, V]) Range

func (m *Map[K, V]) Range(f func(key K, value V) bool)

Range 遍历, f 不能为 nil 传入 f 的时候,K 和 V 直接使用对应的类型,如果 f 返回 false,那么就会中断遍历

func (*Map[K, V]) Store

func (m *Map[K, V]) Store(key K, value V)

Store 存储键值对

type Pool

type Pool[T any] struct {
	// contains filtered or unexported fields
}

Pool 是对 sync.Pool 的简单封装 会有一些性能损耗,但是基本可以忽略不计。担忧性能问题的可以参考

Example
// Create a pool for byte slices
pool := NewPool(func() []byte {
	return make([]byte, 1024)
})

// Get a byte slice from the pool
buf := pool.Get()
// Use the buffer
buf[0] = 1
// Return it to the pool when done
pool.Put(buf)

func NewPool

func NewPool[T any](factory func() T) *Pool[T]

NewPool 创建一个 Pool 实例 factory 必须返回 T 类型的值,并且不能返回 nil

func (*Pool[T]) Get

func (p *Pool[T]) Get() T

Get 取出一个元素

func (*Pool[T]) Put

func (p *Pool[T]) Put(t T)

Put 放回去一个元素

type RWMutexMap

type RWMutexMap[K comparable, V any] struct {
	// contains filtered or unexported fields
}

RWMutexMap 带读写锁的并发安全泛型Map,且支持限制最大容量控制【仅用于写场景>=30%,读场景>=90%建议还是使用sync.map】

func NewRWMutexMap

func NewRWMutexMap[K comparable, V any](capacity, maxCapacity int) *RWMutexMap[K, V]

NewRWMutexMap 创建一个新的并发安全Map

  • capacity: 初始容量,如果为0则使用默认容量
  • maxCapacity: 最大容量限制,如果为0则表示无限制

func (*RWMutexMap[K, V]) CapMax

func (m *RWMutexMap[K, V]) CapMax() int

CapMax 返回容量限制

func (*RWMutexMap[K, V]) Clear

func (m *RWMutexMap[K, V]) Clear()

Clear 清空map

func (*RWMutexMap[K, V]) Delete

func (m *RWMutexMap[K, V]) Delete(key K)

Delete 删除键值对

func (*RWMutexMap[K, V]) Get

func (m *RWMutexMap[K, V]) Get(key K) (V, bool)

Get 获取值

func (*RWMutexMap[K, V]) Has

func (m *RWMutexMap[K, V]) Has(key K) bool

Has 检查key是否存在

func (*RWMutexMap[K, V]) IsFull

func (m *RWMutexMap[K, V]) IsFull() bool

IsFull 检查是否已满(仅在设置了最大容量时有效)

func (*RWMutexMap[K, V]) Keys

func (m *RWMutexMap[K, V]) Keys() []K

Keys 返回所有key的切片

func (*RWMutexMap[K, V]) Len

func (m *RWMutexMap[K, V]) Len() int

Len 返回当前元素数量

func (*RWMutexMap[K, V]) Range

func (m *RWMutexMap[K, V]) Range(f func(key K, value V) bool)

Range 遍历map,如果函数返回false则停止遍历 注意:

  • 用户函数在读锁保护下执行,确保数据读取一致性
  • 警告:用户函数不应修改map,否则可能导致竞态条件
  • 如果需要修改map,请使用Set/Delete方法

func (*RWMutexMap[K, V]) Set

func (m *RWMutexMap[K, V]) Set(key K, value V) bool

Set 设置键值对,如果容量已满则返回false,key存在则更新值,key不存在则添加

func (*RWMutexMap[K, V]) SetMaxCapacity

func (m *RWMutexMap[K, V]) SetMaxCapacity(maxCap int)

SetMaxCapacity 设置最大容量限制

func (*RWMutexMap[K, V]) String

func (m *RWMutexMap[K, V]) String() string

String 实现Stringer接口

func (*RWMutexMap[K, V]) Values

func (m *RWMutexMap[K, V]) Values() []V

Values 返回所有value的切片

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL