// Copyright 2018 gf Author(https://github.com/gogf/gf). All Rights Reserved. // // This Source Code Form is subject to the terms of the MIT License. // If a copy of the MIT was not distributed with this file, // You can obtain one at https://github.com/gogf/gf. package gtype import "sync/atomic" type Bytes struct { value atomic.Value } // NewBytes returns a concurrent-safe object for []byte type, // with given initial value . func NewBytes(value ...[]byte) *Bytes { t := &Bytes{} if len(value) > 0 { t.value.Store(value[0]) } return t } // Clone clones and returns a new concurrent-safe object for []byte type. func (v *Bytes) Clone() *Bytes { return NewBytes(v.Val()) } // Set atomically stores into t.value and returns the previous value of t.value. // Note: The parameter cannot be nil. func (v *Bytes) Set(value []byte) (old []byte) { old = v.Val() v.value.Store(value) return } // Val atomically loads t.value. func (v *Bytes) Val() []byte { if s := v.value.Load(); s != nil { return s.([]byte) } return nil }