golang中使用go-cache是非常普遍的,比如,我在對接微信客服接口的時候,獲取access_token,默認獲取一次有兩個小時的有效期
這個時候,我就可以使用go-cache來緩存access_token了
下面是對go-cache的測試用例:
package tools import ( "testing" "time" "github.com/patrickmn/go-cache" ) func TestGoCache(t *testing.T) { // 創建一個具有默認過期時間爲5分鐘和清理間隔爲10分鐘的緩存 c := cache.New(5*time.Minute, 10*time.Minute) // 使用默認過期時間將鍵 "foo" 的值設置爲 "bar" c.Set("foo", "bar", cache.DefaultExpiration) // 獲取鍵 "foo" 的值 value, found := c.Get("foo") if !found { t.Error("緩存中未找到鍵 'foo'") } if value != "bar" { t.Errorf("預期爲 'bar',得到 '%s'", value) } // 刪除鍵 "foo" c.Delete("foo") // 檢查鍵 "foo" 是否已刪除 _, found = c.Get("foo") if found { t.Error("鍵 'foo' 應該被刪除") } } // TestGoCacheWithExpiration 測試設置過期時間爲3600秒的數據 func TestGoCacheWithExpiration(t *testing.T) { // 創建一個具有默認過期時間爲5分鐘和清理間隔爲10分鐘的緩存 c := cache.New(5*time.Minute, 10*time.Minute) // 將鍵 "foo" 的值設置爲 "bar",過期時間爲10秒 c.Set("foo", "bar", time.Duration(10)*time.Second) // 獲取鍵 "foo" 的值 value, found := c.Get("foo") if !found { t.Error("緩存中未找到鍵 'foo'") } if value != "bar" { t.Errorf("預期爲 'bar',得到 '%s'", value) } // 等待10秒後,鍵 "foo" 應該過期 time.Sleep(10 * time.Second) // 檢查鍵 "foo" 是否已過期 _, found = c.Get("foo") if found { t.Error("鍵 'foo' 應該已過期") } }
go test -v go_cache_test.go
過期以後就會被刪除的,所以測試全部通過