package syncutils import "sync" type SyncVar[T any] struct { writeLocker sync.Locker readLocker sync.Locker v T } func NewSyncVar[T any](v T, isRWMutex bool) *SyncVar[T] { var writeLocker sync.Locker var readLocker sync.Locker if !isRWMutex { mutex := &sync.Mutex{} writeLocker = mutex readLocker = mutex } else { mutex := &sync.RWMutex{} writeLocker = mutex readLocker = mutex.RLocker() } return &SyncVar[T]{ writeLocker: writeLocker, readLocker: readLocker, v: v, } }