Golang併發atomic.Value安全操作
阿新 • • 發佈:2018-11-03
通過封裝atomic.Value原子值型別,可以實現安全儲存不會引發panic type atomicValue struct { v atomic.Value t reflect.Type } func NewAtomicValue(example interface{}) (*atomicValue, error) { if example == nil { return nil, errors.New("atomic value: nil example") } return &atomicValue{ t: reflect.TypeOf(example), }, nil } func (av *atomicValue) Store(v interface{}) error { if v == nil { return errors.New("atomic value: nil value") } t := reflect.TypeOf(v) if t != av.t { return fmt.Errorf("atomic value: wrong type: %s", t) } av.v.Store(v) return nil } func (av *atomicValue) Load() interface{} { return av.v.Load() } func (av *atomicValue) TypeOfValue() reflect.Type { return av.t }