http-add-on/pkg/util/atomicvalue.go

29 lines
382 B
Go

package util
import (
"sync/atomic"
)
type AtomicValue[V any] struct {
atomicValue atomic.Value
}
func NewAtomicValue[V any](v V) *AtomicValue[V] {
var av AtomicValue[V]
av.Set(v)
return &av
}
func (av *AtomicValue[V]) Get() V {
if v, ok := av.atomicValue.Load().(V); ok {
return v
}
return *new(V)
}
func (av *AtomicValue[V]) Set(v V) {
av.atomicValue.Store(v)
}