Help us shape the future of Go! Take the 2026 Go Developer Survey

memoize

package
v1.152.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package memoize caches the results of expensive function calls, keyed by string, with an optional time-to-live. Concurrent calls for the same key are de-duplicated so the underlying function runs only once at a time.

A failed call (one that returns a non-nil error) is never cached, so the next call retries. A panic in the memoized function is propagated to every caller waiting on the same key (the value is wrapped and re-raised by the underlying golang.org/x/sync/singleflight group).

Expired entries are evicted lazily, when their key is next accessed or overwritten; there is no background janitor. Memory use is therefore bounded by the number of distinct keys, which suits callers that memoize a small, fixed set of keys.

Index

Constants

View Source
const NoExpiration time.Duration = -1

NoExpiration, used as the ttl passed to New, keeps cached values forever. Any ttl <= 0 has the same effect.

Variables

This section is empty.

Functions

This section is empty.

Types

type Memoizer

type Memoizer[T any] struct {
	// contains filtered or unexported fields
}

Memoizer caches values of type T keyed by string. The zero value is not usable; create one with New. A Memoizer is safe for concurrent use by multiple goroutines.

func New

func New[T any](ttl time.Duration) *Memoizer[T]

New creates a Memoizer whose cached values expire after ttl. A ttl <= 0 (for example NoExpiration) keeps values forever.

func (*Memoizer[T]) Memoize

func (m *Memoizer[T]) Memoize(key string, fn func() (T, error)) (T, error)

Memoize returns the cached value for key, computing it with fn on a miss or when the cached value has expired. Only one execution of fn is in-flight for a given key at a time; concurrent callers share its result. If fn returns an error, the result is not cached and the error is returned to the caller(s).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL