Documentation
¶
Index ¶
- Variables
- type Value
- func (o Value[V]) IfNotPresent(fn func())
- func (o Value[V]) IfPresent(fn func(V))
- func (o Value[V]) IsEmpty() bool
- func (o Value[V]) IsNotEmpty() bool
- func (o Value[V]) IsPresent() bool
- func (o Value[V]) MustGet() V
- func (o Value[V]) MustGetf(msg string, args ...any) V
- func (o Value[V]) Or(other Value[V]) Value[V]
- func (o Value[V]) OrElse(defaultValue V) V
- func (o Value[V]) OrElseGet(defaultValue func() V) V
- func (o Value[V]) OrError(err error) (V, error)
- func (o Value[V]) OrErrorGet(err func() error) (V, error)
- func (o Value[V]) OrZeroValue() V
- func (o Value[V]) Seq() iter.Seq[V]
- func (o Value[V]) Seq2() iter.Seq2[V, error]
- func (o Value[V]) ShouldGet() (V, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ValueNotPresent = errors.New(valueNotPresentErrorMessage)
ValueNotPresent is the error returned or passed to iter.Seq2 when the value is not present.
Functions ¶
This section is empty.
Types ¶
type Value ¶ added in v0.29.0
type Value[V any] struct { // contains filtered or unexported fields }
Value represents an optional value.
func Empty ¶
Empty returns an empty optional value.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Empty[string]() fmt.Println("Is empty:", opt.IsEmpty()) fmt.Println("Is present:", opt.IsPresent()) }
Output: Is empty: true Is present: false
func Map ¶ added in v0.21.0
Map is a function that maps the value of optional if it is present.
Example ¶
package main import ( "fmt" "strings" "github.com/go-softwarelab/common/pkg/optional" ) func main() { // Map a present value opt := optional.Of("hello") // Map to uppercase upperOpt := optional.Map(opt, strings.ToUpper) fmt.Println("Mapped value:", upperOpt.MustGet()) // Map with more complex function lenOpt := optional.Map(opt, func(s string) int { return len(s) }) fmt.Println("String length:", lenOpt.MustGet()) }
Output: Mapped value: HELLO String length: 5
Example (Chain) ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { // Chaining multiple Map operations opt := optional.Of(42) msg := optional.Map(opt, func(n int) string { return fmt.Sprintf("Number: %d", n) }) result := optional.Map(msg, func(s string) []byte { return []byte(s) }) // Check if result is present if result.IsPresent() { fmt.Printf("Result type: %T\n", result.MustGet()) fmt.Printf("Result length: %d\n", len(result.MustGet())) } }
Output: Result type: []uint8 Result length: 10
Example (Empty) ¶
package main import ( "fmt" "strings" "github.com/go-softwarelab/common/pkg/optional" ) func main() { // Map an empty optional emptyOpt := optional.Empty[string]() // Map function won't be called for empty optionals mapped := optional.Map(emptyOpt, strings.ToUpper) fmt.Println("Is mapped empty:", mapped.IsEmpty()) fmt.Println("Is mapped present:", mapped.IsPresent()) }
Output: Is mapped empty: true Is mapped present: false
func Of ¶
Of returns an optional with the given value. If the value is a pointer, and it's nil, it returns an empty optional. Otherwise, it returns non-empty optional with the given value.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { // With a value opt := optional.Of("hello") fmt.Println("Value:", opt.MustGet()) fmt.Println("Is empty:", opt.IsEmpty()) // With a nil pointer var ptr *string = nil optPtr := optional.Of(ptr) fmt.Println("Nil pointer optional is empty:", optPtr.IsEmpty()) }
Output: Value: hello Is empty: false Nil pointer optional is empty: true
func OfPtr ¶ added in v0.18.0
OfPtr returns an optional with the value from pointer. If the pointer is nil, it returns an empty optional. Otherwise, it returns non-empty optional with the value pointed to by the pointer.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { // With a value pointer value := "hello" opt := optional.OfPtr(&value) fmt.Println("Value:", opt.MustGet()) // With a nil pointer var nilPtr *string optNil := optional.OfPtr(nilPtr) fmt.Println("Is empty:", optNil.IsEmpty()) }
Output: Value: hello Is empty: true
func OfValue ¶ added in v0.18.0
func OfValue[E comparable](v E) Value[E]
OfValue returns an optional for the given value. If value is zero value, it returns an empty optional. Otherwise, it returns non-empty optional with the given value.
If zero value is valid existing value for you, for example when the value is int, then prefer Of() instead.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { // Non-zero value opt := optional.OfValue(42) fmt.Println("Value present:", opt.IsPresent()) fmt.Println("Value:", opt.MustGet()) // Zero value optZero := optional.OfValue(0) fmt.Println("Zero value present:", optZero.IsPresent()) }
Output: Value present: true Value: 42 Zero value present: false
func Some ¶ added in v0.29.0
Some returns an optional with the given value. It doesn't make any checks on value - it was caller decision to understand this value as present.
func (Value[V]) IfNotPresent ¶ added in v0.29.0
func (o Value[V]) IfNotPresent(fn func())
IfNotPresent executes the function if the value is not present.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of("hello") empty := optional.Empty[string]() opt.IfNotPresent(func() { fmt.Println("This won't be printed") }) empty.IfNotPresent(func() { fmt.Println("This executes when empty") }) }
Output: This executes when empty
func (Value[V]) IfPresent ¶ added in v0.29.0
func (o Value[V]) IfPresent(fn func(V))
IfPresent executes the function if the value is present.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of("hello") empty := optional.Empty[string]() opt.IfPresent(func(value string) { fmt.Println("Value is present:", value) }) empty.IfPresent(func(value string) { fmt.Println("This won't be printed") }) }
Output: Value is present: hello
func (Value[V]) IsNotEmpty ¶ added in v0.29.0
IsNotEmpty returns true if the value is present.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of("hello") empty := optional.Empty[string]() fmt.Println("First is not empty:", opt.IsNotEmpty()) fmt.Println("Second is not empty:", empty.IsNotEmpty()) }
Output: First is not empty: true Second is not empty: false
func (Value[V]) MustGet ¶ added in v0.29.0
func (o Value[V]) MustGet() V
MustGet returns the value if present, otherwise panics.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of("hello") fmt.Println("Value:", opt.MustGet()) // Note: Using MustGet on empty optional would panic // empty := optional.Empty[string]() // empty.MustGet() // would panic with "value is not present" }
Output: Value: hello
func (Value[V]) MustGetf ¶ added in v0.29.0
MustGetf returns the value if present, otherwise panics with a custom message.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of("hello") fmt.Println("Value:", opt.MustGetf("Custom error: %s", "not found")) // Note: Using MustGetf on empty optional would panic with custom message // empty := optional.Empty[string]() // empty.MustGetf("Custom error: %s", "not found") // would panic with "Custom error: not found" }
Output: Value: hello
func (Value[V]) Or ¶ added in v0.29.0
Or returns this optional if present, otherwise returns the other optional.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt1 := optional.Of("first") opt2 := optional.Of("second") empty := optional.Empty[string]() // Present optional takes precedence fmt.Println("First or second:", opt1.Or(opt2).MustGet()) fmt.Println("Empty or second:", empty.Or(opt2).MustGet()) }
Output: First or second: first Empty or second: second
func (Value[V]) OrElse ¶ added in v0.29.0
func (o Value[V]) OrElse(defaultValue V) V
OrElse returns the value if present, otherwise returns the default value.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of("hello") empty := optional.Empty[string]() fmt.Println("Present value:", opt.OrElse("default")) fmt.Println("Empty value:", empty.OrElse("default")) }
Output: Present value: hello Empty value: default
func (Value[V]) OrElseGet ¶ added in v0.29.0
func (o Value[V]) OrElseGet(defaultValue func() V) V
OrElseGet returns the value if present, otherwise returns the default value from the function.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of("hello") empty := optional.Empty[string]() counter := 0 getDefault := func() string { counter++ return fmt.Sprintf("default-%d", counter) } fmt.Println("Present value:", opt.OrElseGet(getDefault)) fmt.Println("Empty value:", empty.OrElseGet(getDefault)) fmt.Println("Empty value again:", empty.OrElseGet(getDefault)) }
Output: Present value: hello Empty value: default-1 Empty value again: default-2
func (Value[V]) OrError ¶ added in v0.29.0
OrError returns the value if present, otherwise returns the error.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of(42) empty := optional.Empty[int]() val1, err1 := opt.OrError(fmt.Errorf("not found")) fmt.Println("Value:", val1) fmt.Println("Error:", err1) val2, err2 := empty.OrError(fmt.Errorf("not found")) fmt.Println("Empty value:", val2) fmt.Println("Empty error:", err2 != nil) }
Output: Value: 42 Error: <nil> Empty value: 0 Empty error: true
func (Value[V]) OrErrorGet ¶ added in v0.29.0
OrErrorGet returns the value if present, otherwise returns the error from the function.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of(42) empty := optional.Empty[int]() errCounter := 0 getError := func() error { errCounter++ return fmt.Errorf("not found-%d", errCounter) } val1, err1 := opt.OrErrorGet(getError) fmt.Println("Value:", val1) fmt.Println("Error:", err1) val2, err2 := empty.OrErrorGet(getError) fmt.Println("Empty value:", val2) fmt.Println("Empty error:", err2) }
Output: Value: 42 Error: <nil> Empty value: 0 Empty error: not found-1
func (Value[V]) OrZeroValue ¶ added in v0.29.0
func (o Value[V]) OrZeroValue() V
OrZeroValue returns the value if present, otherwise returns the zero value of the type.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of(42) empty := optional.Empty[int]() fmt.Println("Present value:", opt.OrZeroValue()) fmt.Println("Empty value:", empty.OrZeroValue()) }
Output: Present value: 42 Empty value: 0
func (Value[V]) Seq ¶ added in v0.29.0
Seq returns the sequence with yelded value if present, otherwise returns an empty sequence.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" "github.com/go-softwarelab/common/pkg/seq" ) func main() { opt := optional.Of("hello") var values []string seq.ForEach(opt.Seq(), func(value string) { values = append(values, value) }) fmt.Println("Values:", values) empty := optional.Empty[string]() var emptyValues []string seq.ForEach(empty.Seq(), func(value string) { emptyValues = append(emptyValues, value) }) fmt.Println("Empty values length:", len(emptyValues)) }
Output: Values: [hello] Empty values length: 0
func (Value[V]) Seq2 ¶ added in v0.29.0
Seq2 returns the iter.Seq2[V, error] with yelded value if present, otherwise yields an error. Useful with usage of seqerr package.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" "github.com/go-softwarelab/common/pkg/seqerr" ) func main() { opt := optional.Of("hello") empty := optional.Empty[string]() err := seqerr.ForEach(opt.Seq2(), func(value string) { fmt.Printf("Value: %s\n", value) }) if err != nil { panic(err) } // With empty value err = seqerr.ForEach(empty.Seq2(), func(value string) { fmt.Printf("Unexpected value: %s\n", value) }) if err != nil { fmt.Printf("Expected error: %v\n", err) } }
Output: Value: hello Expected error: value is not present
func (Value[V]) ShouldGet ¶ added in v0.29.0
ShouldGet returns the value if present, otherwise returns the error ValueNotPresent.
Example ¶
package main import ( "fmt" "github.com/go-softwarelab/common/pkg/optional" ) func main() { opt := optional.Of(42) empty := optional.Empty[int]() val1, err1 := opt.ShouldGet() fmt.Println("Value:", val1) fmt.Println("Error:", err1) val2, err2 := empty.ShouldGet() fmt.Println("Empty value:", val2) fmt.Println("Empty error:", err2) }
Output: Value: 42 Error: <nil> Empty value: 0 Empty error: value is not present