go: 实现简单的内存级别缓存

使用go自带的sync.Map和time.AfterFunc可以很简单的实现一个基于内存的缓存map。key不多的时候,效果还是很不错的。

package cache    import (      "sync"      "sync/atomic"      "time"  )    var globalMap sync.Map  var len int64    func Set(key string, data interface{}, timeout int) {      globalMap.Store(key, data)      atomic.AddInt64(&len, 1)      time.AfterFunc(time.Second*time.Duration(timeout), func() {          atomic.AddInt64(&len, -1)          globalMap.Delete(key)      })  }    func Get(key string) (interface{}, bool) {      return globalMap.Load(key)  }    func Len() int {      return int(len)  }