Skip to content

Instantly share code, notes, and snippets.

@eraserhd
Created July 13, 2023 16:38
Show Gist options
  • Save eraserhd/570f406cd26cfb0c7ab635b8c6f1c653 to your computer and use it in GitHub Desktop.
Save eraserhd/570f406cd26cfb0c7ab635b8c6f1c653 to your computer and use it in GitHub Desktop.
defer.go
package tkt
import (
"sync"
)
type Deferred[T any] interface {
Get() T
}
func Defer[T any](compute func() T) Deferred[T] {
return &deferred[T]{compute: compute}
}
type deferred[T any] struct {
once sync.Once
value T
compute func() T
}
func (d *deferred[T]) Get() T {
d.once.Do(func() {
d.value = d.compute()
})
return d.value
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment