From: qydysky Date: Wed, 1 May 2024 13:01:37 +0000 (+0000) Subject: 1 X-Git-Tag: v0.28.20240501130702 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=a6c9bfcfe0cb0e01c0649b7e4e559147d9f5e5cf;p=part%2F.git 1 --- diff --git a/sync/Map.go b/sync/Map.go index abc0589..6eb3de1 100644 --- a/sync/Map.go +++ b/sync/Map.go @@ -79,7 +79,7 @@ type MapExceeded[K, V any] struct { } type mapExceededItem[V any] struct { - data *V + data V exceeded time.Time wait sync.RWMutex } @@ -95,21 +95,21 @@ func (t *MapExceeded[K, V]) Copy() (m *MapExceeded[K, V]) { return } -func (t *MapExceeded[K, V]) Store(k K, v *V, dur time.Duration) { +func (t *MapExceeded[K, V]) Store(k K, v V, dur time.Duration) { t.m.Store(k, &mapExceededItem[V]{ data: v, exceeded: time.Now().Add(dur), }) } -func (t *MapExceeded[K, V]) Load(k K) (*V, bool) { +func (t *MapExceeded[K, V]) Load(k K) (v V, ok bool) { if v, ok := t.m.LoadV(k).(*mapExceededItem[V]); ok { if v.exceeded.After(time.Now()) { return v.data, true } t.Delete(k) } - return nil, false + return } func (t *MapExceeded[K, V]) Range(f func(key K, value *V) bool) { @@ -139,8 +139,8 @@ func (t *MapExceeded[K, V]) Delete(k K) { t.m.Delete(k) } -func (t *MapExceeded[K, V]) LoadOrStore(k K) (vr *V, loaded bool, store func(v1 *V, dur time.Duration)) { - store = func(v1 *V, dur time.Duration) {} +func (t *MapExceeded[K, V]) LoadOrStore(k K) (vr V, loaded bool, store func(v1 V, dur time.Duration)) { + store = func(v1 V, dur time.Duration) {} var actual any actual, loaded = t.m.LoadOrStore(k, &mapExceededItem[V]{}) v := actual.(*mapExceededItem[V]) @@ -152,7 +152,7 @@ func (t *MapExceeded[K, V]) LoadOrStore(k K) (vr *V, loaded bool, store func(v1 return } if !loaded || (loaded && !exp.IsZero()) { - store = func(v1 *V, dur time.Duration) { + store = func(v1 V, dur time.Duration) { v.wait.Lock() v.data = v1 v.exceeded = time.Now().Add(dur) diff --git a/sync/Map_test.go b/sync/Map_test.go index 5754273..7b09725 100644 --- a/sync/Map_test.go +++ b/sync/Map_test.go @@ -335,7 +335,7 @@ func Benchmark_syncMap_Range(b *testing.B) { } func TestMapExceeded1(t *testing.T) { - var m MapExceeded[string, []byte] + var m MapExceeded[string, *[]byte] var data = []byte("1") m.Store("1", &data, time.Second) if b, ok := m.Load("1"); !ok || 0 != bytes.Compare(*b, []byte("1")) { @@ -348,7 +348,7 @@ func TestMapExceeded1(t *testing.T) { } func TestMapExceeded2(t *testing.T) { - var m MapExceeded[string, []byte] + var m MapExceeded[string, *[]byte] var data = []byte("1") if v, loaded, f := m.LoadOrStore("1"); v != nil || loaded { t.Fatal() @@ -375,7 +375,7 @@ func TestMapExceeded2(t *testing.T) { } func TestMapExceeded3(t *testing.T) { - var m MapExceeded[string, []byte] + var m MapExceeded[string, *[]byte] var data = []byte("1") if v, loaded, f := m.LoadOrStore("1"); v != nil || loaded { t.Fatal() diff --git a/web/Web.go b/web/Web.go index 47d0464..1f5f8e2 100644 --- a/web/Web.go +++ b/web/Web.go @@ -485,7 +485,7 @@ func (t *limitItem) Request(matchf func(req *http.Request) (match bool)) *limitI } type Cache struct { - g psync.MapExceeded[string, []byte] + g psync.MapExceeded[string, *[]byte] gcL atomic.Int64 }