做一个人网站需要注意什么,怎么查网站icp,青岛开办公司要做网站吗,山西省建设工程信息网golang 函数式编程库samber/mo使用#xff1a; Result
如果您不了解samber/mo库#xff0c; 请先阅读上一篇 Option #xff0c; 这篇讲述结构体Result的使用
Result和Option区别
samber/mo有了Option#xff0c; 为什么还有Result呢? 我们先看看定义#xff1a;
Opt…golang 函数式编程库samber/mo使用 Result
如果您不了解samber/mo库 请先阅读上一篇 Option 这篇讲述结构体Result的使用
Result和Option区别
samber/mo有了Option 为什么还有Result呢? 我们先看看定义
Option的定义如下
type Option[T any] struct {isPresent boolvalue T
}type Result[T any] struct {isErr boolvalue Terr error
}从结构来看 Result除了值外还有一个error字段用来存储错误信息。可以看出Option是用来处理可能存在值的情况而Result是用来处理可能存在错误的情况。
Result的使用
构造函数主要有以下两个:
mo.Ok() 包裹一个值并且表示成功 doc - playmo.Err() 包裹错误 doc - play
示例如下
package mainimport (errorsfmtgithub.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其他构造函数
mo.Errf() doc - playmo.TupleToResult() doc - playmo.Try() 执行一个函数如果没有错误返回Ok否则返回Err doc - play
Result类型的方法
和Option类似 Result也提供 Size, Get, MustGet, OrElse, OrEmpty, ForEach, Match, Map, FlatMap方法。
同时 Result还提供了一些特有的方法比如
.IsOk() 是否是成功 doc - play.IsError() 是否是错误 doc - play.Error() 返回错误信息 doc - play.ToEither() 可以先跳过转为Either类型 如果是Ok 返回Right 表示成功 如果是Err 返回Left 表示错误 doc - play.MapErr() 如果是Err 执行一个函数返回一个新的Result doc - play
下一篇