// package ctx_value -- потокобезопасное значение локального контекста. package ctx_value import ( "sync" mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0" mKt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc" ) // CtxValue -- потокобезопасное значение локального контекста. type CtxValue struct { sync.RWMutex key string createAt mKt.ITime Val_ any UpdateAt_ mKt.ITimeMut Comment_ string } // NewCtxValue -- возвращает новое потокобезопасное значение локального контекста. func NewCtxValue(key string, val any, comment string) mKt.ICtxValue { mL0.Hassert(key != "", "NewCtxValue(): key is empty") sf := &CtxValue{ key: key, createAt: voc.NewETimeAuto(), UpdateAt_: voc.NewETimeAutoMut(), Val_: val, Comment_: comment, } return sf } // Key -- возвращает ключ значения. func (sf *CtxValue) Key() string { return sf.key } // Val -- возвращает хранимое значение. func (sf *CtxValue) Val() any { sf.RLock() defer sf.RUnlock() return sf.Val_ } // UpdateAt -- возвращает время обновления значения. func (sf *CtxValue) UpdateAt() mKt.ITimeMut { sf.RLock() defer sf.RUnlock() return sf.UpdateAt_ } // CreateAt -- возвращает время создания значения. func (sf *CtxValue) CreateAt() mKt.ITime { return sf.createAt } // Comment -- возвращает комментарий значения. func (sf *CtxValue) Comment() string { sf.RLock() defer sf.RUnlock() return sf.Comment_ }