result

package
v0.4.1 Latest Latest
Warning

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

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

Documentation

Overview

Package result 提供显式表示成功与失败的 Result 类型及辅助函数。

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func All

func All[T, E any](values []Result[T, E]) bool

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

func Error[T, E any](value Result[T, E]) 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

func Match[T, E any](value Result[T, E], ok func(T), err func(E))

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

func Partition[T, E any](values []Result[T, E]) ([]T, []E)

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

type Result[T, E any] = gomad.Result[T, E]

Result 表示一次成功或失败的计算。

func AndThen

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

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

func Collect[T, E any](values []Result[T, E]) Result[[]T, E]

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

func Err[T, E any](err E) Result[T, E]

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

func From[T any](value T, err error) Result[T, error]

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

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

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

func MapErr[T, E, F any](value Result[T, E], transform func(E) F) Result[T, F]

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

func Ok[T, E any](value T) Result[T, E]

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

func OrElse[T, E, F any](value Result[T, E], fallback func(E) Result[T, F]) Result[T, F]

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

func Wrap

func Wrap[T any](value Result[T, error], message string) Result[T, error]

Wrap 为错误 Result 添加上下文。

Example
package main

import (
	"errors"
	"fmt"

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

func main() {
	value := result.Wrap(result.Err[int](error(errors.New("failed"))), "load")
	fmt.Println(value.IntoError())
}
Output:
load: failed

Jump to

Keyboard shortcuts

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