package safe import ( "sync" ) // Safe contains a thread-safe value. type Safe struct { value interface{} lock sync.RWMutex } // New create a new Safe instance given a value. func New(value interface{}) *Safe { return &Safe{value: value, lock: sync.RWMutex{}} } // Get returns the value. func (s *Safe) Get() interface{} { s.lock.RLock() defer s.lock.RUnlock() return s.value } // Set sets a new value. func (s *Safe) Set(value interface{}) { s.lock.Lock() defer s.lock.Unlock() s.value = value }