Option

A generic optional type library for golang like the rust option enum

GoReportCard example GoDoc reference example

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

GitHub

View Github