mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 04:42:33 +02:00
30 lines
501 B
Go
30 lines
501 B
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"sync/atomic"
|
|
)
|
|
|
|
type AtomicValue[T any] struct {
|
|
atomic.Value
|
|
}
|
|
|
|
func (a *AtomicValue[T]) Load() T {
|
|
return a.Value.Load().(T)
|
|
}
|
|
|
|
func (a *AtomicValue[T]) Store(v T) {
|
|
a.Value.Store(v)
|
|
}
|
|
|
|
func (a *AtomicValue[T]) Swap(v T) T {
|
|
return a.Value.Swap(v).(T)
|
|
}
|
|
|
|
func (a *AtomicValue[T]) CompareAndSwap(oldV, newV T) bool {
|
|
return a.Value.CompareAndSwap(oldV, newV)
|
|
}
|
|
|
|
func (a *AtomicValue[T]) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(a.Load())
|
|
}
|