package atomic import "sync/atomic" type AtomicInt64 struct { val *atomic.Int64 } func NewAtomicInt64() *AtomicInt64 { return &AtomicInt64{val: &atomic.Int64{}} } func (a *AtomicInt64) Reset() { a.val.Store(0) } // AddAndGet 以原子方式将当前值+delta,并返回+delta之后的值 func (a *AtomicInt64) AddAndGet(delta int64) int64 { return a.val.Add(delta) } // GetAndAdd 以原子方式将当前值+delta,并返回+delta之前的值 func (a *AtomicInt64) GetAndAdd(delta int64) int64 { tmp := a.val.Load() a.val.Add(delta) return tmp } // UpdateAndGet 以原子方式更新值,并返回更新后的值 func (a *AtomicInt64) UpdateAndGet(val int64) int64 { a.val.Store(val) return val } // GetAndUpdate 以原子方式更新值,并返回更新前的值 func (a *AtomicInt64) GetAndUpdate(val int64) int64 { tmp := a.val.Load() a.val.Store(val) return tmp } // GetAndIncrement 以原子方式将当前值+1,并返回+1前的值 func (a *AtomicInt64) GetAndIncrement() int64 { return a.GetAndAdd(1) } // GetAndDecrement 以原子方式将当前值-1,并返回-1前的值 func (a *AtomicInt64) GetAndDecrement() int64 { return a.GetAndAdd(-1) } // IncrementAndGet 以原子方式将当前值+1,并返回+1后的值 func (a *AtomicInt64) IncrementAndGet() int64 { return a.AddAndGet(1) } // DecrementAndGet 以原子方式将当前值-1,并返回-1后的值 func (a *AtomicInt64) DecrementAndGet() int64 { return a.AddAndGet(-1) }