40 lines
639 B
Go
40 lines
639 B
Go
// transctx
|
|
package transact
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type TransCtx struct {
|
|
fields map[interface{}]interface{}
|
|
lock *sync.RWMutex
|
|
}
|
|
|
|
func NewTransCtx() *TransCtx {
|
|
tc := &TransCtx{
|
|
lock: new(sync.RWMutex),
|
|
}
|
|
return tc
|
|
}
|
|
|
|
func (this *TransCtx) SetField(k, v interface{}) {
|
|
this.lock.Lock()
|
|
if this.fields == nil {
|
|
this.fields = make(map[interface{}]interface{})
|
|
}
|
|
this.fields[k] = v
|
|
this.lock.Unlock()
|
|
}
|
|
|
|
func (this *TransCtx) GetField(k interface{}) interface{} {
|
|
this.lock.RLock()
|
|
if this.fields != nil {
|
|
if v, exist := this.fields[k]; exist {
|
|
this.lock.RUnlock()
|
|
return v
|
|
}
|
|
}
|
|
this.lock.RUnlock()
|
|
return nil
|
|
}
|