lazy

package
v1.66.4 Latest Latest
Warning

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

Go to latest
Published: May 21, 2024 License: BSD-3-Clause Imports: 1 Imported by: 12

Documentation

Overview

Package lazy provides types for lazily initialized values.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GFunc

func GFunc[T any](fill func() T) func() T

GFunc wraps a function to make it lazy.

The returned function calls fill the first time it's called, and returns fill's result on every subsequent call.

The returned function is not safe for concurrent use.

func GFuncErr

func GFuncErr[T any](fill func() (T, error)) func() (T, error)

SyncFuncErr wraps a function to make it lazy.

The returned function calls fill the first time it's called, and returns fill's results on every subsequent call.

The returned function is not safe for concurrent use.

func SyncFunc

func SyncFunc[T any](fill func() T) func() T

SyncFunc wraps a function to make it lazy.

The returned function calls fill the first time it's called, and returns fill's result on every subsequent call.

The returned function is safe for concurrent use.

func SyncFuncErr

func SyncFuncErr[T any](fill func() (T, error)) func() (T, error)

SyncFuncErr wraps a function to make it lazy.

The returned function calls fill the first time it's called, and returns fill's results on every subsequent call.

The returned function is safe for concurrent use.

Types

type GValue

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

GValue is a lazily computed value.

Use either Get or GetErr, depending on whether your fill function returns an error.

Recursive use of a GValue from its own fill function will panic.

GValue is not safe for concurrent use. (Mnemonic: G is for one Goroutine, which isn't strictly true if you provide your own synchronization between goroutines, but in practice most of our callers have been using it within a single goroutine.)

func (*GValue[T]) Get

func (z *GValue[T]) Get(fill func() T) T

Get returns z's value, calling fill to compute it if necessary. f is called at most once.

func (*GValue[T]) GetErr

func (z *GValue[T]) GetErr(fill func() (T, error)) (T, error)

GetErr returns z's value, calling fill to compute it if necessary. f is called at most once, and z remembers both of fill's outputs.

func (*GValue[T]) MustSet

func (z *GValue[T]) MustSet(val T)

MustSet sets z's value to val, or panics if z already has a value.

func (*GValue[T]) Set

func (z *GValue[T]) Set(v T) bool

Set attempts to set z's value to val, and reports whether it succeeded. Set only succeeds if none of Get/GetErr/Set have been called before.

type SyncValue

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

SyncValue is a lazily computed value.

Use either Get or GetErr, depending on whether your fill function returns an error.

Recursive use of a SyncValue from its own fill function will deadlock.

SyncValue is safe for concurrent use.

func (*SyncValue[T]) Get

func (z *SyncValue[T]) Get(fill func() T) T

Get returns z's value, calling fill to compute it if necessary. f is called at most once.

func (*SyncValue[T]) GetErr

func (z *SyncValue[T]) GetErr(fill func() (T, error)) (T, error)

GetErr returns z's value, calling fill to compute it if necessary. f is called at most once, and z remembers both of fill's outputs.

func (*SyncValue[T]) MustSet

func (z *SyncValue[T]) MustSet(val T)

MustSet sets z's value to val, or panics if z already has a value.

func (*SyncValue[T]) Set

func (z *SyncValue[T]) Set(val T) bool

Set attempts to set z's value to val, and reports whether it succeeded. Set only succeeds if none of Get/GetErr/Set have been called before.

Jump to

Keyboard shortcuts

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