Documentation
¶
Overview ¶
Package option 提供零分配的 Option 类型及其常用辅助函数。
Index ¶
- func All[T any](values []Option[T]) bool
- func Any[T any](values []Option[T]) bool
- func Match[T any](value Option[T], some func(T), none func())
- func OkOr[T, E any](value Option[T], err E) gomad.Result[T, E]
- func OkOrElse[T, E any](value Option[T], fallback func() E) gomad.Result[T, E]
- type Option
- func AndThen[T, U any](value Option[T], transform func(T) Option[U]) Option[U]
- func Collect[T any](values []Option[T]) Option[[]T]
- func Flatten[T any](value Option[Option[T]]) Option[T]
- func FromIterator[T any](iter iterator.Iterator[T]) Option[T]
- func FromPtr[T any](value *T) Option[T]
- func FromValueError[T any](value T, err error) Option[T]
- func FromValueOk[T any](value T, ok bool) Option[T]
- func FromZero[T comparable](value T) Option[T]
- func Map[T, U any](value Option[T], transform func(T) U) Option[U]
- func None[T any]() Option[T]
- func Some[T any](value T) Option[T]
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func All ¶
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 ¶
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 ¶
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 ¶
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
Types ¶
type Option ¶
Option 表示一个可能存在的值;其零值为 None。
func AndThen ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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
Click to show internal directories.
Click to hide internal directories.