option

package module
v1.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 8, 2025 License: MIT Imports: 13 Imported by: 1

README

github.com/typomaker/option

Optional type for the Golang. A generic value wrapper that adds two additional value representations:

  • Zero - Same as undefined. Basic value state, persists until None or Some value is assigned.
  • None - Same as null. A logically explicit absence of a value.
  • Some - Usual value representation.

Usage

import "github.com/typomaker/option"
Value initialization and checks.
import "github.com/typomaker/option"
var value option.Option[string]
if value.IsZero() { // if value is undefined.
    value = option.Some("foo") // then define it using Some[string](...).
}
if value.IsSome() { // if value is defined and not null
    value = option.None[string]() // then set it null using None[string]() 
}
if value.IsNone() { // if value is defined and null
    value = option.Option[string]{} // then undefine it with the zero Option struct.
}

Value getting.
var value option.Option[string]

value.Get() // returns value if defined not null, otherwise panics.
value.GetOr("fallback") // returns value if defined not null, otherwise passed value.
value.GetOrZero() // always returns value, if undefined or null then zero value.
value.GetOrFunc(func() string {return "fallback"}) // returns a value if defined not null. otherwise, returns the result of the passed function.
Convert value to optional.

SomeOrNone function returns Some[T](...) for non zero and not nil value, otherwise returns None[T]()

fmt.Printf("%#v\n", SomeOrNone(0))
fmt.Printf("%#v\n", SomeOrZero(0))
fmt.Printf("%#v\n", SomeOrNone(1))
fmt.Printf("%#v\n", SomeOrNone((*string)(nil)))
fmt.Printf("%#v\n", SomeOrNone("123123"))
// Output:
// option.None[int]()
// option.Option[int]{}
// option.Some[int](1)
// option.None[*string]()
// option.Some[string]("123123")
OneOf helper

Returns first some option from passed. If passed doesn't contain some value, then returns None[T]().

var value1 = option.None[int]()
var value2 = option.Some[int](1)
var value3 = option.Some[int](2)

fmt.Printf("%#v", option.OneOf(value1, value2, value3))

// Output:
// Some[int](1)
GetOf helper

Returns value of first some option from passed.

var value1 = option.None[int]()
var value2 = option.Some[int](1)
var value3 = option.Some[int](2)

fmt.Printf("%#v", option.GetOf(value1, value2, value3))

// Output:
// 1
PickOf helper

Returns all values of passed options, exclude the zero and none option.

var value1 = option.None[int]()
var value2 = option.Some[int](1)
var value3 = option.None[int]()
var value4 = option.Option[int]{}

fmt.Printf("%#v", option.PickOf(value1, value2, value3, value4))

// Output:
// []int{1, 2}

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Equal added in v1.0.2

func Equal[T comparable](l, r Option[T]) bool

func EqualFunc added in v1.0.2

func EqualFunc[L, R any](l Option[L], r Option[R], fn func(l L, r R) bool) bool

Types

type Noneable

type Noneable interface{ IsNone() bool }

type Option

type Option[T any] struct {
	// contains filtered or unexported fields
}
Example (States)
var value Option[string]
fmt.Println("value is zero, same as undefined:", value.IsZero())

value = None[string]()
fmt.Println("value is none, defined and same as null:", value.IsNone())

value = Some[string]("hello world")
fmt.Println("value is some, defined and not null:", value.IsSome())
Output:

value is zero, same as undefined: true
value is none, defined and same as null: true
value is some, defined and not null: true

func None

func None[T any]() Option[T]

func Some

func Some[T any](v T) Option[T]

func (Option[T]) Get

func (o Option[T]) Get() T

Get returns a value if it some, in other case panics.

func (Option[T]) GetOr

func (o Option[T]) GetOr(value T) T

GetOr returns the value if the option is none.

Example
fmt.Println("none", None[int]().GetOr(1))
fmt.Println("some", Some(2).GetOr(1))
fmt.Println("zero", Option[int]{}.GetOr(3))
Output:

none 1
some 2
zero 3

func (Option[T]) GetOrFunc

func (o Option[T]) GetOrFunc(getter func() T) T

GetOrFunc retunrs value from getter if the option is none

Example
fmt.Println("none", None[int]().GetOrFunc(func() int { return 1 }))
fmt.Println("some", Some(2).GetOrFunc(func() int { return 1 }))
fmt.Println("zero", Option[int]{}.GetOrFunc(func() int { return 3 }))
Output:

none 1
some 2
zero 3

func (Option[T]) GetOrZero

func (o Option[T]) GetOrZero() T

GetOrZero returns the zero value if the option is none.

Example
fmt.Println("none", None[int]().GetOrZero())
fmt.Println("some", Some(1).GetOrZero())
fmt.Println("zero", Option[int]{}.GetOrZero())
Output:

none 0
some 1
zero 0

func (Option[T]) GoString

func (o Option[T]) GoString() string

func (Option[T]) IsNone

func (o Option[T]) IsNone() bool

IsNone returns a true if value is none.

func (Option[T]) IsSome

func (o Option[T]) IsSome() bool

IsNone returns a true if value is some.

func (Option[T]) IsZero

func (o Option[T]) IsZero() bool

IsZero returns a true if value is zero.

func (Option[T]) LogValue added in v1.0.3

func (o Option[T]) LogValue() slog.Value

func (Option[T]) MarshalJSON

func (o Option[T]) MarshalJSON() (b []byte, err error)

MarshalJSON is a implementation of the json.Marshaler.

func (*Option[T]) Scan added in v1.0.3

func (it *Option[T]) Scan(value any) (err error)

func (Option[T]) String

func (o Option[T]) String() string

func (*Option[T]) UnmarshalJSON

func (o *Option[T]) UnmarshalJSON(b []byte) (err error)

UnmarshalJSON is a implementation of the json.Unmarshaler.

func (*Option[T]) Value added in v1.0.3

func (it *Option[T]) Value() (driver.Value, error)

type Someable

type Someable interface{ IsSome() bool }

type Zeroable

type Zeroable interface{ IsZero() bool }

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL