1 Star 0 Fork 0

Ellan-bm / base64Captcha

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
store_sync_map.go 1.19 KB
一键复制 编辑 原始数据 按行查看 历史
Ellan-bm 提交于 2022-06-14 15:11 . first commit
package base64Captcha
import (
"sync"
"time"
)
//StoreSyncMap use sync.Map as store
type StoreSyncMap struct {
liveTime time.Duration
m *sync.Map
}
//NewStoreSyncMap new a instance
func NewStoreSyncMap(liveTime time.Duration) *StoreSyncMap {
return &StoreSyncMap{liveTime: liveTime, m: new(sync.Map)}
}
//smv a value type
type smv struct {
t time.Time
Value string
}
//newSmv create a instance
func newSmv(v string) *smv {
return &smv{t: time.Now(), Value: v}
}
//rmExpire remove expired items
func (s StoreSyncMap) rmExpire() {
expireTime := time.Now().Add(-s.liveTime)
s.m.Range(func(key, value interface{}) bool {
if sv, ok := value.(*smv); ok && sv.t.Before(expireTime) {
s.m.Delete(key)
}
return true
})
}
//Get get a string value
func (s StoreSyncMap) Set(id string, value string) {
s.rmExpire()
s.m.Store(id, newSmv(value))
}
//Set a string value
func (s StoreSyncMap) Get(id string, clear bool) string {
v, ok := s.m.Load(id)
if !ok {
return ""
}
s.m.Delete(id)
if sv, ok := v.(*smv); ok {
return sv.Value
}
return ""
}
//Verify check a string value
func (s StoreSyncMap) Verify(id, answer string, clear bool) bool {
return s.Get(id, clear) == answer
}
1
https://gitee.com/ellan-bm/base64Captcha.git
git@gitee.com:ellan-bm/base64Captcha.git
ellan-bm
base64Captcha
base64Captcha
v1.0.4

搜索帮助