美文网首页
(转)golang并发atomic.Value安全操作

(转)golang并发atomic.Value安全操作

作者: one_zheng | 来源:发表于2019-04-17 17:58 被阅读0次
    // 通过封装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
    }
    
    

    相关文章

      网友评论

          本文标题:(转)golang并发atomic.Value安全操作

          本文链接:https://www.haomeiwen.com/subject/rdxowqtx.html