From 3021672de562a662361111130508d981eaf10e3c Mon Sep 17 00:00:00 2001 From: yusing Date: Fri, 28 Mar 2025 07:06:07 +0800 Subject: [PATCH] refactor: move atomic.Value to value.go, improved handling for zero values --- internal/utils/atomic/bool.go | 5 +++++ .../utils/atomic/{atomic_value.go => value.go} | 16 ++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 internal/utils/atomic/bool.go rename internal/utils/atomic/{atomic_value.go => value.go} (66%) diff --git a/internal/utils/atomic/bool.go b/internal/utils/atomic/bool.go new file mode 100644 index 0000000..0c462c3 --- /dev/null +++ b/internal/utils/atomic/bool.go @@ -0,0 +1,5 @@ +package atomic + +import "sync/atomic" + +type Bool = atomic.Bool diff --git a/internal/utils/atomic/atomic_value.go b/internal/utils/atomic/value.go similarity index 66% rename from internal/utils/atomic/atomic_value.go rename to internal/utils/atomic/value.go index 7f9bfd2..65140fe 100644 --- a/internal/utils/atomic/atomic_value.go +++ b/internal/utils/atomic/value.go @@ -10,7 +10,11 @@ type Value[T any] struct { } func (a *Value[T]) Load() T { - return a.Value.Load().(T) + if v := a.Value.Load(); v != nil { + return v.(T) + } + var zero T + return zero } func (a *Value[T]) Store(v T) { @@ -18,11 +22,11 @@ func (a *Value[T]) Store(v T) { } func (a *Value[T]) Swap(v T) T { - return a.Value.Swap(v).(T) -} - -func (a *Value[T]) CompareAndSwap(oldV, newV T) bool { - return a.Value.CompareAndSwap(oldV, newV) + if v := a.Value.Swap(v); v != nil { + return v.(T) + } + var zero T + return zero } func (a *Value[T]) MarshalJSON() ([]byte, error) {