小工具知识网

当前位置: 首页 > 行业知识 > golang 函数式编程库samber/mo使用: Result

行业知识

golang 函数式编程库samber/mo使用: Result

2026-10-31 15:39:14 来源:互联网转载

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 - play
  • mo.Err() 包裹错误 doc - play

    示例如下:

    package mainimport ("errors""fmt""github.com/samber/mo")func pide(a, b int) mo.Result[int] {if b == 0 {return mo.Err[int](errors.New("pision by zero"))}return mo.Ok(a / b)}func main() {pide(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 - play
    • mo.TupleToResult() doc - play
    • mo.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

        下一篇

上一篇:怎么介绍电商网站?

下一篇:使用Node.js搭建服务器