Merge all the server components
This commit is contained in:
parent
85b5603d9d
commit
f5f2ac1a03
25 changed files with 365 additions and 352 deletions
27
pkg/lazy/lazy.go
Normal file
27
pkg/lazy/lazy.go
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
package lazy
|
||||
|
||||
import "sync"
|
||||
|
||||
// Lazy is an object that a lazily-initialized value of type T.
|
||||
//
|
||||
// A Lazy must not be copied after first use.
|
||||
type Lazy[T any] struct {
|
||||
once sync.Once
|
||||
value T
|
||||
}
|
||||
|
||||
// Get returns the value associated with this Lazy.
|
||||
//
|
||||
// If no other call to Get has started or completed an initialization, initializes the value using the init function.
|
||||
// Otherwise, it returns the initialized value.
|
||||
//
|
||||
// If init panics, the initization is considered to be completed.
|
||||
// Future calls to Get() do not invoke init, and the zero value of T is returned.
|
||||
//
|
||||
// Get may safely be called concurrently.
|
||||
func (lazy *Lazy[T]) Get(init func() T) T {
|
||||
lazy.once.Do(func() {
|
||||
lazy.value = init()
|
||||
})
|
||||
return lazy.value
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue