package main
import("fmt""sync""time")var m sync.Map
var timeMap sync.Map
funcset(key string,val interface{},exp time.Duration){
expT := time.Now().Add(exp)
m.Store(key,val)
timeMap.Store(key,&expT)
time.AfterFunc(exp,func(){
v,ok := timeMap.Load(key)if!ok {return}if v.(*time.Time).Sub(time.Now()).Seconds()>0{return}
m.Delete(key)})}
测试:
funcmain(){set("name","lufei",time.Second*10)
start := time.Now()
i :=0for{
i++
time.Sleep(time.Second)if i ==3{
fmt.Println("执行")set("name","lufei",time.Second*10)}
val, ok := m.Load("name")if ok {
fmt.Println(val)}else{break}}
t := time.Since(start)
fmt.Println(t)}