Documentation
¶
Overview ¶
Package result 提供显式表示成功与失败的 Result 类型及辅助函数。
Index ¶
- func All[T, E any](values []Result[T, E]) bool
- func Error[T, E any](value Result[T, E]) error
- func Match[T, E any](value Result[T, E], ok func(T), err func(E))
- func Partition[T, E any](values []Result[T, E]) ([]T, []E)
- type Result
- func AndThen[T, U, E any](value Result[T, E], transform func(T) Result[U, E]) Result[U, E]
- func Collect[T, E any](values []Result[T, E]) Result[[]T, E]
- func Err[T, E any](err E) Result[T, E]
- func From[T any](value T, err error) Result[T, error]
- func Map[T, U, E any](value Result[T, E], transform func(T) U) Result[U, E]
- func MapErr[T, E, F any](value Result[T, E], transform func(E) F) Result[T, F]
- func Ok[T, E any](value T) Result[T, E]
- func OrElse[T, E, F any](value Result[T, E], fallback func(E) Result[T, F]) Result[T, F]
- func Wrap[T any](value Result[T, error], message string) Result[T, error]
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func All ¶
All 判断所有 Result 是否都是 Ok;空切片返回 true。
Example ¶
package main
import (
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
values := []result.Result[int, error]{
result.Ok[int, error](1),
result.Ok[int, error](2),
}
fmt.Println(result.All(values))
}
Output: true
func Error ¶
Error 将 Err 转为 error,将 Ok 转为 nil;返回值可用于 errors.Is 与 errors.As。
Example ¶
package main
import (
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
err := result.Error(result.Err[int]("failed"))
fmt.Println(err)
}
Output: failed
func Match ¶
Match 根据状态调用 ok 或 err 分支。
Example ¶
package main
import (
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
result.Match(
result.Ok[int, error](10),
func(value int) { fmt.Println("ok", value) },
func(err error) { fmt.Println("err", err) },
)
}
Output: ok 10
func Partition ¶
Partition 按原顺序把 Ok 与 Err 值分到两个切片中。
Example ¶
package main
import (
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
values := []result.Result[int, string]{
result.Ok[int, string](1),
result.Err[int]("failed"),
result.Ok[int, string](2),
}
okValues, errValues := result.Partition(values)
fmt.Println(okValues)
fmt.Println(errValues)
}
Output: [1 2] [failed]
Types ¶
type Result ¶
Result 表示一次成功或失败的计算。
func AndThen ¶
AndThen 串联另一个返回 Result 的操作,并允许改变成功值类型。
Example ¶
package main
import (
"fmt"
"strconv"
"github.com/23jdd/gomad/result"
)
func main() {
value := result.AndThen(result.Ok[int, error](10), func(value int) result.Result[string, error] {
return result.Ok[string, error](strconv.Itoa(value))
})
fmt.Println(value.Unwrap())
}
Output: 10
func Collect ¶
Collect 收集全部 Ok 值;遇到第一个 Err 时立即返回该错误。
Example ¶
package main
import (
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
values := []result.Result[int, error]{
result.Ok[int, error](1),
result.Ok[int, error](2),
}
fmt.Println(result.Collect(values).Unwrap())
}
Output: [1 2]
func Err ¶
Err 创建一个失败的 Result;可以显式指定 T 并让编译器推断 E。
Example ¶
package main
import (
"errors"
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
value := result.Err[int](errors.New("failed"))
fmt.Println(value.UnwrapErr())
}
Output: failed
func From ¶
From 将 Go 常见的 (value, error) 返回值转换为 Result。
Example ¶
package main
import (
"fmt"
"strconv"
"github.com/23jdd/gomad/result"
)
func main() {
value := result.From(strconv.Atoi("10"))
fmt.Println(value.Unwrap())
}
Output: 10
func Map ¶
Map 转换 Ok 中的值,并允许改变成功值类型。
Example ¶
package main
import (
"fmt"
"strconv"
"github.com/23jdd/gomad/result"
)
func main() {
value := result.Map(result.Ok[int, error](10), strconv.Itoa)
fmt.Println(value.Unwrap())
}
Output: 10
func MapErr ¶
MapErr 转换 Err 中的值,并允许改变错误值类型。
Example ¶
package main
import (
"errors"
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
value := result.MapErr(result.Err[int]("failed"), errors.New)
fmt.Println(value.UnwrapErr())
}
Output: failed
func Ok ¶
Ok 创建一个成功的 Result。
Example ¶
package main
import (
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
value := result.Ok[int, error](10)
fmt.Println(value.Unwrap())
}
Output: 10
func OrElse ¶
OrElse 恢复 Err 分支,并允许改变错误值类型。
Example ¶
package main
import (
"fmt"
"github.com/23jdd/gomad/result"
)
func main() {
value := result.OrElse(result.Err[int]("failed"), func(string) result.Result[int, error] {
return result.Ok[int, error](10)
})
fmt.Println(value.Unwrap())
}
Output: 10
Click to show internal directories.
Click to hide internal directories.