Option
A generic optional type library for golang like the rust option enum
Installation
go get github.com/joetifa2003/option-go
Create an optional
With a value (Some)
optional := option.NewSome(10)
fmt.Println(optional.IsSome()) // true
fmt.Println(optional.OrElse(14)) // 10 because it has a value of 10
Without a value (None)
optional := option.NewNone[int]()
fmt.Println(optional.IsNone()) // true
fmt.Println(optional.OrElse(14)) // 14 because it has no value
Unwrap an optional
With a value (Some)
optional := option.NewSome("John Doe")
value, isSome := optional.Unwrap()
fmt.Println(value) // John Doe
fmt.Println(isSome) // true
Without a value (None)
optional := option.NewNone[string]()
value, isSome := optional.Unwrap()
fmt.Println(value) // "" zero value for type string
fmt.Println(isSome) // false
Set an optional
Some
optional := option.NewNone[string]()
value, isSome := optional.Unwrap()
fmt.Println(value) // "" zero value for type string
fmt.Println(isSome) // false
optional.SetSome("John Doe")
value, isSome = optional.Unwrap()
fmt.Println(value) // John Doe
fmt.Println(isSome) // true
None
optional := option.NewSome("John Doe")
value, isSome := optional.Unwrap()
fmt.Println(value) // John Doe
fmt.Println(isSome) // true
optional.SetNone()
value, isSome = optional.Unwrap()
fmt.Println(value) // "" zero value for type string
fmt.Println(isSome) // false
See all other methods in the documentation here