Documentation
¶
Overview ¶
Package zerokit helps with zero value related use-cases such as initialisation.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Coalesce ¶
func Coalesce[T any](vs ...T) T
Coalesce will return the first non-zero value from the provided values.
Example ¶
package main import ( "go.llib.dev/frameless/pkg/zerokit" ) func main() { _ = zerokit.Coalesce("", "", "42") // -> "42" }
func Init ¶
func Init[T any, I *T | func() T](ptr *T, init I) T
Init will initialise a zero value through its pointer (*T), If it's not set, it assigns a value to it based on the supplied initialiser. Init is safe to use concurrently, it has no race condition.
Example ¶
package main import ( "go.llib.dev/frameless/pkg/zerokit" ) func main() { type MyType struct { V string } var mt MyType _ = zerokit.Init(&mt.V, func() string { return "default value from a lambda" }) var defaultValue = "default value from a shared variable" _ = zerokit.Init(&mt.V, &defaultValue) }
func InitErr ¶ added in v0.266.0
Init will initialise a zero value through its pointer (*T), If it's not set, it assigns a value to it based on the supplied initialiser. Init is safe to use concurrently, it has no race condition.
Example ¶
package main import ( "fmt" "go.llib.dev/frameless/pkg/zerokit" ) func main() { var val string got, err := zerokit.InitErr(&val, func() (string, error) { return "foo", fmt.Errorf("some error might occur, it will be handled") }) _, _ = got, err }
Types ¶
type V ¶ added in v0.214.0
type V[T any] struct { // contains filtered or unexported fields }
V is a type that can initialise itself upon access (V.Get). Map, Slice, Chan types are made, while primitive types returned as zero value. Pointer types are made with an initialised value.
V is not thread safe, it just makes initialisation at type level in struct fields more convenient. The average cost for using V is low, see the benchmark for more
Example ¶
package main import ( "go.llib.dev/frameless/pkg/zerokit" ) func main() { type MyStructType struct { fields zerokit.V[*[]string] foundKeys zerokit.V[map[string]struct{}] } var mst MyStructType mst.foundKeys.Get() }