safe_string.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // package safe_string -- потокобезопасная строка
  2. package safe_string
  3. import (
  4. "sync"
  5. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  6. )
  7. // safeString -- потокобезопасная строка
  8. type safeString struct {
  9. sync.RWMutex
  10. val string
  11. }
  12. // NewSafeString -- возвращает новую потокобезопасную строку
  13. func NewSafeString() ISafeString {
  14. sf := &safeString{}
  15. return sf
  16. }
  17. // Byte -- возвращает байтовое представление строки
  18. func (sf *safeString) Byte() []byte {
  19. sf.RLock()
  20. defer sf.RUnlock()
  21. return []byte(sf.val)
  22. }
  23. // Get -- возвращает хранимую строку
  24. func (sf *safeString) Get() string {
  25. sf.RLock()
  26. defer sf.RUnlock()
  27. return sf.val
  28. }
  29. // Set -- устанавливает строку
  30. func (sf *safeString) Set(val string) {
  31. sf.Lock()
  32. defer sf.Unlock()
  33. sf.val = val
  34. }
  35. // Reset -- сбрасывает строку
  36. func (sf *safeString) Reset() {
  37. sf.Lock()
  38. defer sf.Unlock()
  39. sf.val = ""
  40. }