Documentation
¶
Overview ¶
Package lazyload DEPRECATED: use zerokit instead
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Make ¶
func Make[T any](init func() T) func() T
Make allows a value to be lazy evaluated when it is actually used.
Example ¶
package main
import (
"fmt"
"go.llib.dev/frameless/pkg/lazyload"
)
func main() {
value := lazyload.Make(func() int {
// my expensive calculation's result
return 42
})
// one eternity later
fmt.Println(value())
fmt.Println(value())
}
Types ¶
type Var ¶
type Var[T any] struct { Init func() T // contains filtered or unexported fields }
Example (AsStructField) ¶
package main
import (
"math/rand"
"go.llib.dev/frameless/pkg/lazyload"
)
type MyStruct struct {
lazyLoadedVariable lazyload.Var[int]
}
func (ms *MyStruct) Num() int {
return ms.lazyLoadedVariable.Get(func() int {
return rand.Int()
})
}
func main() {
ms := &MyStruct{}
ms.Num() // uses lazy loading under the hood
}
func (*Var[T]) Get ¶
func (i *Var[T]) Get(inits ...func() T) T
Example ¶
package main
import (
"go.llib.dev/frameless/pkg/lazyload"
)
func main() {
myInt := lazyload.Var[int]{
Init: func() int {
return 42
},
}
_ = myInt.Get() // get 42
}
Example (WithInitBlock) ¶
package main
import (
"go.llib.dev/frameless/pkg/lazyload"
)
func main() {
// This use-case is ideal for initializing lazyload.Var s in struct fields,
// where defining Init at high level is not possible.
type MyStruct struct {
myInt lazyload.Var[int]
}
r := &MyStruct{}
// func (r *MyType) getValue() int {
getValue := func() int {
return r.myInt.Get(func() int {
return 42
})
}
_ = getValue() // 42
}
Click to show internal directories.
Click to hide internal directories.