赞
踩
如果您不了解samber/mo库, 请先阅读上一篇 Option , 这篇讲述结构体Result的使用
samber/mo有了Option, 为什么还有Result呢? 我们先看看定义:
Option的定义如下:
type Option[T any] struct {
isPresent bool
value T
}
type Result[T any] struct {
isErr bool
value T
err error
}
从结构来看, Result除了值外,还有一个error字段,用来存储错误信息。可以看出Option是用来处理可能存在值的情况,而Result是用来处理可能存在错误的情况。
构造函数主要有以下两个:
示例如下:
package main import ( "errors" "fmt" "github.com/samber/mo" ) func divide(a, b int) mo.Result[int] { if b == 0 { return mo.Err[int](errors.New("division by zero")) } return mo.Ok(a / b) } func main() { divide(6, 3). Match( func(value int) (int, error) { fmt.Println("Result is", value) return value, nil }, func(err error) (int, error) { fmt.Println("Error is", err) return 0, err }, ) }
和Option一样, Result也有Match方法, 如果Result不是Err,就执行第一个函数;否则执行第二个函数。所以上面的函数输出为
Result is 2
其他构造函数
和Option类似, Result也提供 Size, Get, MustGet, OrElse, OrEmpty, ForEach, Match, Map, FlatMap方法。
同时, Result还提供了一些特有的方法,比如:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。