mirror of
https://github.com/duke-git/lancet.git
synced 2025-10-07 00:12:51 +08:00

Utilize terminology from the Go SDK rather than introducing novel terms to describe concepts.
7.1 KiB
7.1 KiB
Optional
Optional类型代表一个可选的值,它要么包含一个实际值,要么为空。
源码
用法
import (
"github.com/duke-git/lancet/v2/datastructure/optional"
)
目录
- Of
- FromNillable
- Default
- IsNotNil
- IsNil
- IsNotNil
- IfNotNilOrElse
- Umwarp
- OrElse
- OrElseGet
- OrElseTrigger
文档
Of
返回一个包含非空值的Optional。
函数签名:
func Of[T any](value T) Optional[T]
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
value := 42
opt := optional.Of(value)
fmt.Println(opt.Get())
// Output:
// 42
}
FromNillable
返回一个包含给定值的Optional,该值可能为空 (nil)。
函数签名:
func FromNillable[T any](value *T) Optional[T]
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
var value *int = nil
opt := optional.FromNillable(value)
fmt.Println(opt.IsNotNil())
value = new(int)
*value = 42
opt = optional.FromNillable(value)
fmt.Println(opt.IsNotNil())
// Output:
// false
// true
}
Default
返回一个空Optional实例。
函数签名:
func Default[T any]() Optional[T]
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
optDefault := optional.Default[int]()
fmt.Println(optDefault.IsNil())
// Output:
// true
}
IsNil
验证Optional是否为空。
函数签名:
func (o Optional[T]) IsNil() bool
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
optDefault := optional.Default[int]()
fmt.Println(optDefault.IsNil())
// Output:
// true
}
IsNotNil
检查当前Optional内是否存在值。
函数签名:
func (o Optional[T]) IsNotNil() bool
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
var value *int = nil
opt := optional.FromNillable(value)
fmt.Println(opt.IsNotNil())
value = new(int)
*value = 42
opt = optional.FromNillable(value)
fmt.Println(opt.IsNotNil())
// Output:
// false
// true
}
IfNotNil
如果值存在,则使用action方法执行给定的操作。
函数签名:
func (o Optional[T]) IfNotNil(action func(value T))
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
called := false
action := func(value int) { called = true }
optDefault := optional.Default[int]()
optDefault.IfNotNil(action)
fmt.Println(called)
called = false // Reset for next test
optWithValue := optional.Of(42)
optWithValue.IfNotNil(action)
fmt.Println(optWithValue.IsNotNil())
// Output:
// false
// true
}
IfNotNilOrElse
根据是否存在值执行相应的操作:有值则执行指定操作,没有值则执行默认操作。
函数签名:
func (o Optional[T]) IfNotNilOrElse(action func(value T), fallbackAction func())
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
calledWithValue := false
valueAction := func(value int) { calledWithValue = true }
emptyAction := func() { t.Errorf("Empty action should not be called when value is present") }
optWithValue := optional.Of(42)
optWithValue.IfNotNilOrElse(valueAction, emptyAction)
fmt.Println(calledWithValue)
calledWithEmpty := false
valueAction = func(value int) { t.Errorf("Value action should not be called when value is not present") }
emptyAction = func() { calledWithEmpty = true }
optDefault := optional.Default[int]()
optDefault.IfNotNilOrElse(valueAction, emptyAction)
fmt.Println(calledWithEmpty)
// Output:
// true
// true
}
Unwrap
如果存在,返回该值,否则引发panic。
函数签名:
func (o Optional[T]) Unwrap() T
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
value := 42
opt := optional.Of(value)
fmt.Println(opt.Unwrap())
// Output:
// 42
}
OrElse
检查Optional值是否存在,如果存在,则直接返回该值。如果不存在,返回参数other值。
函数签名:
func (o Optional[T]) OrElse(other T) T
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
optDefault := optional.Empty[int]()
val := optDefault.OrElse(100)
fmt.Println(val)
optWithValue := optional.Of(42)
val = optWithValue.OrElse(100)
fmt.Println(val)
// Output:
// 100
// 42
}
OrElseGet
检查Optional值是否存在,如果存在,则直接返回该值。如果不存在,则调用一个提供的函数 (supplier),并返回该函数的执行结果。
函数签名:
func (o Optional[T]) OrElseGet(action func() T) T
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
optDefault := optional.Default[int]()
action := func() int { return 100 }
val := optDefault.OrElseGet(action)
fmt.Println(val)
// Output:
// 100
}
OrElseTrigger
检查Optional值是否存在,如果存在,则直接返回该值,否则返回错误。
函数签名:
OrElseTrigger(errorHandler func() error) (T, error)
示例:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/datastructure/optional"
)
func main() {
optDefault := optional.Default[int]()
_, err := optDefault.OrElseTrigger(func() error { return errors.New("no value") })
fmt.Println(err.Error())
optWithValue := optional.Of(42)
val, err := optWithValue.OrElseTrigger(func() error { return errors.New("no value") })
fmt.Println(val)
fmt.Println(err)
// Output:
// no value
// 42
// nil
}