mirror of
https://github.com/lejianwen/rustdesk-api.git
synced 2025-11-29 08:33:21 +00:00
first
This commit is contained in:
65
lib/cache/simple_cache.go
vendored
Normal file
65
lib/cache/simple_cache.go
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"reflect"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// 此处实现了一个简单的缓存,用于测试
|
||||
// SimpleCache is a simple cache implementation
|
||||
type SimpleCache struct {
|
||||
data map[string]interface{}
|
||||
mu sync.Mutex
|
||||
maxBytes int64
|
||||
usedBytes int64
|
||||
}
|
||||
|
||||
func (s *SimpleCache) Get(key string, value interface{}) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
// 使用反射将存储的值设置到传入的指针变量中
|
||||
val := reflect.ValueOf(value)
|
||||
if val.Kind() != reflect.Ptr {
|
||||
return errors.New("value must be a pointer")
|
||||
}
|
||||
v, ok := s.data[key]
|
||||
if !ok {
|
||||
//设为空值
|
||||
val.Elem().Set(reflect.Zero(val.Elem().Type()))
|
||||
return nil
|
||||
}
|
||||
|
||||
vval := reflect.ValueOf(v)
|
||||
if val.Elem().Type() != vval.Type() {
|
||||
//设为空值
|
||||
val.Elem().Set(reflect.Zero(val.Elem().Type()))
|
||||
return nil
|
||||
}
|
||||
|
||||
val.Elem().Set(reflect.ValueOf(v))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SimpleCache) Set(key string, value interface{}, exp int) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
// 检查传入的值是否是指针,如果是则取其值
|
||||
val := reflect.ValueOf(value)
|
||||
if val.Kind() == reflect.Ptr {
|
||||
val = val.Elem()
|
||||
}
|
||||
|
||||
s.data[key] = val.Interface()
|
||||
return nil
|
||||
}
|
||||
func (s *SimpleCache) Gc() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewSimpleCache() *SimpleCache {
|
||||
return &SimpleCache{
|
||||
data: make(map[string]interface{}),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user