option

package module
v1.0.6 Latest Latest
Warning

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

Go to latest
Published: Jun 27, 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 - Defined value.

Usage

import "github.com/typomaker/option"
Value initialization and checks.
import "github.com/typomaker/option"
// Some value defintion.
var some = option.Some("foo")
fmt.Println(some.IsSome()) // true
fmt.Println(some.GetOrZero()) // foo
fmt.Println(some.GetOr("bar")) // foo
fmt.Println(some.Get()) // foo

// None value definition.
var none = option.None[string]()
fmt.Println(none.IsNone()) // true
fmt.Println(none.GetOrZero()) // ""
fmt.Println(none.GetOr("bar")) // bar
fmt.Println(none.Get()) // panic

// Zero value definition.
var zero = option.Option[string]{}
fmt.Println(zero.IsZero()) // true
fmt.Println(zero.GetOrZero()) // ""
fmt.Println(zero.GetOr("bar")) // bar
fmt.Println(zero.Get()) // panic

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