mirror of
https://github.com/patrickmn/go-cache.git
synced 2025-10-05 15:46:50 +08:00
Use a type switch instead, and Use unexported NewSharded in test
This commit is contained in:
57
cache.go
57
cache.go
@@ -7,7 +7,6 @@ import (
|
|||||||
"hash/fnv"
|
"hash/fnv"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -142,38 +141,36 @@ func (c *cache) IncrementFloat(k string, n float64) error {
|
|||||||
c.Unlock()
|
c.Unlock()
|
||||||
return fmt.Errorf("item not found")
|
return fmt.Errorf("item not found")
|
||||||
}
|
}
|
||||||
|
switch v.Object.(type) {
|
||||||
t := reflect.TypeOf(v.Object)
|
case int:
|
||||||
switch t.Kind() {
|
v.Object = v.Object.(int) + int(n)
|
||||||
|
case int8:
|
||||||
|
v.Object = v.Object.(int8) + int8(n)
|
||||||
|
case int16:
|
||||||
|
v.Object = v.Object.(int16) + int16(n)
|
||||||
|
case int32:
|
||||||
|
v.Object = v.Object.(int32) + int32(n)
|
||||||
|
case int64:
|
||||||
|
v.Object = v.Object.(int64) + int64(n)
|
||||||
|
case uint:
|
||||||
|
v.Object = v.Object.(uint) + uint(n)
|
||||||
|
case uintptr:
|
||||||
|
v.Object = v.Object.(uintptr) + uintptr(n)
|
||||||
|
case uint8:
|
||||||
|
v.Object = v.Object.(uint8) + uint8(n)
|
||||||
|
case uint16:
|
||||||
|
v.Object = v.Object.(uint16) + uint16(n)
|
||||||
|
case uint32:
|
||||||
|
v.Object = v.Object.(uint32) + uint32(n)
|
||||||
|
case uint64:
|
||||||
|
v.Object = v.Object.(uint64) + uint64(n)
|
||||||
|
case float32:
|
||||||
|
v.Object = v.Object.(float32) + float32(n)
|
||||||
|
case float64:
|
||||||
|
v.Object = v.Object.(float64) + n
|
||||||
default:
|
default:
|
||||||
c.Unlock()
|
c.Unlock()
|
||||||
return fmt.Errorf("The value of %s is not an integer", k)
|
return fmt.Errorf("The value of %s is not an integer", k)
|
||||||
case reflect.Uint:
|
|
||||||
v.Object = v.Object.(uint) + uint(n)
|
|
||||||
case reflect.Uintptr:
|
|
||||||
v.Object = v.Object.(uintptr) + uintptr(n)
|
|
||||||
case reflect.Uint8:
|
|
||||||
v.Object = v.Object.(uint8) + uint8(n)
|
|
||||||
case reflect.Uint16:
|
|
||||||
v.Object = v.Object.(uint16) + uint16(n)
|
|
||||||
case reflect.Uint32:
|
|
||||||
v.Object = v.Object.(uint32) + uint32(n)
|
|
||||||
case reflect.Uint64:
|
|
||||||
v.Object = v.Object.(uint64) + uint64(n)
|
|
||||||
case reflect.Int:
|
|
||||||
v.Object = v.Object.(int) + int(n)
|
|
||||||
case reflect.Int8:
|
|
||||||
v.Object = v.Object.(int8) + int8(n)
|
|
||||||
case reflect.Int16:
|
|
||||||
v.Object = v.Object.(int16) + int16(n)
|
|
||||||
case reflect.Int32:
|
|
||||||
v.Object = v.Object.(int32) + int32(n)
|
|
||||||
case reflect.Int64:
|
|
||||||
v.Object = v.Object.(int64) + int64(n)
|
|
||||||
case reflect.Float32:
|
|
||||||
v.Object = v.Object.(float32) + float32(n)
|
|
||||||
case reflect.Float64:
|
|
||||||
v.Object = v.Object.(float64) + n
|
|
||||||
}
|
}
|
||||||
c.Unlock()
|
c.Unlock()
|
||||||
return nil
|
return nil
|
||||||
|
@@ -734,7 +734,7 @@ func BenchmarkCacheGetManyConcurrent(b *testing.B) {
|
|||||||
func BenchmarkShardedCacheGetManyConcurrent(b *testing.B) {
|
func BenchmarkShardedCacheGetManyConcurrent(b *testing.B) {
|
||||||
b.StopTimer()
|
b.StopTimer()
|
||||||
n := 10000
|
n := 10000
|
||||||
tsc := NewSharded(20, 0, 0)
|
tsc := unexportedNewSharded(20, 0, 0)
|
||||||
keys := make([]string, n)
|
keys := make([]string, n)
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
k := "foo" + strconv.Itoa(n)
|
k := "foo" + strconv.Itoa(n)
|
||||||
|
Reference in New Issue
Block a user