Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrCacheRecursiveCall = fmt.Errorf("recursive call detected")
Functions ¶
This section is empty.
Types ¶
type Cache ¶ added in v0.16.3
type Cache[K comparable, V any] interface { // Using the given key, either return an already cached value for that key or initialize // an entry in the cache with the given value for that key. GetOrInitializeValue(context.Context, CacheKey[K], V) (Result[K, V], error) // Using the given key, either return an already cached value for that key or initialize a // new value using the given function. If the function returns an error, the error is returned. GetOrInitialize( context.Context, CacheKey[K], func(context.Context) (V, error), ) (Result[K, V], error) // Using the given key, either return an already cached value for that key or initialize a // new value using the given function. If the function returns an error, the error is returned. // The function returns a ValueWithCallbacks struct that contains the value and optionally // any additional callbacks for various parts of the cache lifecycle. GetOrInitializeWithCallbacks( context.Context, CacheKey[K], func(context.Context) (*ValueWithCallbacks[V], error), ) (Result[K, V], error) // Returns the number of entries in the cache. Size() int }
func NewCache ¶ added in v0.16.3
func NewCache[K comparable, V any]() Cache[K, V]
type CacheKey ¶
type CacheKey[K comparable] struct { // ResultKey is identifies the completed result of this call. If a call has already // been completed with this ResultKey, its cached result will be returned. // // If ResultKey is the zero value for K, the call will not be cached and will always // run. ResultKey K // ConcurrencyKey is used to determine whether *in-progress* calls should be deduplicated. // If a call with a given (ResultKey, ConcurrencyKey) pair is already in progress, and // another one comes in with the same pair, the second caller will wait for the first // to complete and receive the same result. // // If two calls have the same ResultKey but different ConcurrencyKeys, they will not be deduped. // // If ConcurrencyKey is the zero value for K, no deduplication of in-progress calls will be done. ConcurrencyKey K }
type OnReleaseFunc ¶ added in v0.16.3
type PostCallFunc ¶ added in v0.16.3
type ValueWithCallbacks ¶ added in v0.16.3
type ValueWithCallbacks[V any] struct { // The actual value to cache Value V // If set, a function that should be called whenever the value is returned from the cache (whether newly initialized or not) PostCall PostCallFunc // If set, this function will be called when a result is removed from the cache OnRelease OnReleaseFunc }
Click to show internal directories.
Click to hide internal directories.