diff --git a/src/expvar/expvar.go b/src/expvar/expvar.go index 08cd05565d4..300d8c26764 100644 --- a/src/expvar/expvar.go +++ b/src/expvar/expvar.go @@ -67,26 +67,26 @@ func (v *Int) Set(value int64) { // Float is a 64-bit float variable that satisfies the Var interface. type Float struct { - f uint64 + f atomic.Uint64 } func (v *Float) Value() float64 { - return math.Float64frombits(atomic.LoadUint64(&v.f)) + return math.Float64frombits(v.f.Load()) } func (v *Float) String() string { return strconv.FormatFloat( - math.Float64frombits(atomic.LoadUint64(&v.f)), 'g', -1, 64) + math.Float64frombits(v.f.Load()), 'g', -1, 64) } // Add adds delta to v. func (v *Float) Add(delta float64) { for { - cur := atomic.LoadUint64(&v.f) + cur := v.f.Load() curVal := math.Float64frombits(cur) nxtVal := curVal + delta nxt := math.Float64bits(nxtVal) - if atomic.CompareAndSwapUint64(&v.f, cur, nxt) { + if v.f.CompareAndSwap(cur, nxt) { return } } @@ -94,7 +94,7 @@ func (v *Float) Add(delta float64) { // Set sets v to value. func (v *Float) Set(value float64) { - atomic.StoreUint64(&v.f, math.Float64bits(value)) + v.f.Store(math.Float64bits(value)) } // Map is a string-to-Var map variable that satisfies the Var interface. diff --git a/src/expvar/expvar_test.go b/src/expvar/expvar_test.go index 552bae8c64a..ee98b5ef19a 100644 --- a/src/expvar/expvar_test.go +++ b/src/expvar/expvar_test.go @@ -87,8 +87,8 @@ func BenchmarkIntSet(b *testing.B) { func TestFloat(t *testing.T) { RemoveAll() reqs := NewFloat("requests-float") - if reqs.f != 0.0 { - t.Errorf("reqs.f = %v, want 0", reqs.f) + if reqs.f.Load() != 0.0 { + t.Errorf("reqs.f = %v, want 0", reqs.f.Load()) } if reqs != Get("requests-float").(*Float) { t.Errorf("Get() failed.")