| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // package safe_string -- потокобезопасная строка.
- package safe_string
- import (
- "fmt"
- "os"
- "sync"
- mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
- mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
- )
- // safeString -- потокобезопасная строка.
- type safeString struct {
- sync.RWMutex
- val string
- }
- // NewSafeString -- возвращает новую потокобезопасную строку.
- func NewSafeString() mKs.ISafeString {
- sf := &safeString{}
- return sf
- }
- // NewSafeStringGetenv -- возвращает новую потокобезопасную строку из окружения.
- func NewSafeStringGetenv(env string) mL0.IResult[mKs.ISafeString] {
- sf := NewSafeString()
- res := sf.Getenv(env)
- if res.IsErr() {
- err := fmt.Errorf("NewSafeStringGetenv(): in get from env(%v), err=\n\t%w", env, res.Err())
- return mL0.NewErr[mKs.ISafeString](err)
- }
- return mL0.NewRes(sf)
- }
- // Byte -- возвращает байтовое представление строки.
- func (sf *safeString) Byte() []byte {
- sf.RLock()
- defer sf.RUnlock()
- return []byte(sf.val)
- }
- // Get -- возвращает хранимую строку.
- func (sf *safeString) Get() string {
- sf.RLock()
- defer sf.RUnlock()
- return sf.val
- }
- // Set -- устанавливает строку.
- func (sf *safeString) Set(val string) {
- sf.Lock()
- defer sf.Unlock()
- sf.val = val
- }
- // Reset -- сбрасывает строку.
- func (sf *safeString) Reset() {
- sf.Lock()
- defer sf.Unlock()
- sf.val = ""
- }
- // Getenv -- получает значение из окружения.
- func (sf *safeString) Getenv(env string) mL0.IResult[string] {
- strVal := os.Getenv(env)
- if strVal == "" {
- err := fmt.Errorf("safeString.Getenv(): from env(%v), val is empty", env)
- return mL0.NewErr[string](err)
- }
- sf.val = strVal
- return mL0.NewRes(strVal)
- }
|