option

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Sep 6, 2026 License: MIT Imports: 2 Imported by: 0

Documentation

Overview

Package option 提供零分配的 Option 类型及其常用辅助函数。

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func All

func All[T any](values []Option[T]) bool

All 判断所有 Option 是否都是 Some;空切片返回 true。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	values := []option.Option[int]{option.Some(1), option.Some(2)}
	fmt.Println(option.All(values))
}
Output:
true

func Any

func Any[T any](values []Option[T]) bool

Any 判断是否至少存在一个 Some。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	values := []option.Option[int]{option.None[int](), option.Some(2)}
	fmt.Println(option.Any(values))
}
Output:
true

func Match

func Match[T any](value Option[T], some func(T), none func())

Match 根据状态调用 some 或 none 分支。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	option.Match(
		option.Some(10),
		func(value int) { fmt.Println("some", value) },
		func() { fmt.Println("none") },
	)
}
Output:
some 10

func OkOr

func OkOr[T, E any](value Option[T], err E) gomad.Result[T, E]

OkOr 将 Some 转为 Ok,将 None 转为包含 err 的 Err。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.OkOr(option.None[int](), "missing")
	fmt.Println(value.UnwrapErr())
}
Output:
missing

func OkOrElse

func OkOrElse[T, E any](value Option[T], fallback func() E) gomad.Result[T, E]

OkOrElse 将 Some 转为 Ok,None 则调用 fallback 生成 Err。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.OkOrElse(option.None[int](), func() string { return "missing" })
	fmt.Println(value.UnwrapErr())
}
Output:
missing

Types

type Option

type Option[T any] = gomad.Option[T]

Option 表示一个可能存在的值;其零值为 None。

func AndThen

func AndThen[T, U any](value Option[T], transform func(T) Option[U]) Option[U]

AndThen 串联另一个返回 Option 的操作,并允许改变值类型。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.AndThen(option.Some(10), func(value int) option.Option[string] {
		return option.Some(fmt.Sprintf("%d", value))
	})
	fmt.Println(value.Unwrap())
}
Output:
10

func Collect

func Collect[T any](values []Option[T]) Option[[]T]

Collect 收集全部 Some 值;任何一个 None 都会使结果为 None。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.Collect([]option.Option[int]{option.Some(1), option.Some(2)})
	fmt.Println(value.Unwrap())
}
Output:
[1 2]

func Flatten

func Flatten[T any](value Option[Option[T]]) Option[T]

Flatten 去掉一层 Option 嵌套。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.Flatten(option.Some(option.Some(10)))
	fmt.Println(value.Unwrap())
}
Output:
10

func FromIterator

func FromIterator[T any](iter iterator.Iterator[T]) Option[T]

FromIterator 将迭代器中的第一个元素转换为 Some,空迭代器转换为 None。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/iterator"
	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.FromIterator(iterator.Once(10))
	fmt.Println(value.Unwrap())
}
Output:
10

func FromPtr

func FromPtr[T any](value *T) Option[T]

FromPtr 将指针转换为 Option;nil 指针会变为 None。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := 10
	fmt.Println(option.FromPtr(&value).Unwrap())
	fmt.Println(option.FromPtr[int](nil).IsNone())
}
Output:
10
true

func FromValueError

func FromValueError[T any](value T, err error) Option[T]

FromValueError 将 (value, error) 组合转换为 Option。

Example
package main

import (
	"errors"
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	fmt.Println(option.FromValueError(10, nil).Unwrap())
	fmt.Println(option.FromValueError(10, errors.New("failed")).IsNone())
}
Output:
10
true

func FromValueOk

func FromValueOk[T any](value T, ok bool) Option[T]

FromValueOk 将 Go 常见的 (value, ok) 组合转换为 Option。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	values := map[string]int{"answer": 42}
	value, ok := values["answer"]
	fmt.Println(option.FromValueOk(value, ok).Unwrap())
}
Output:
42

func FromZero

func FromZero[T comparable](value T) Option[T]

FromZero 将 T 的零值转换为 None,其他值转换为 Some。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	fmt.Println(option.FromZero(0).IsNone())
	fmt.Println(option.FromZero(10).Unwrap())
}
Output:
true
10

func Map

func Map[T, U any](value Option[T], transform func(T) U) Option[U]

Map 转换 Option 中的值,并允许改变值类型。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.Map(option.Some(10), func(value int) string {
		return fmt.Sprintf("value=%d", value)
	})
	fmt.Println(value.Unwrap())
}
Output:
value=10

func None

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

None 创建一个不包含值的 Option。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.None[int]()
	fmt.Println(value.IsNone())
}
Output:
true

func Some

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

Some 创建一个包含 value 的 Option。

Example
package main

import (
	"fmt"

	"github.com/23jdd/gomad/option"
)

func main() {
	value := option.Some(10)
	fmt.Println(value.Unwrap())
}
Output:
10

Jump to

Keyboard shortcuts

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