当前位置: 首页 > news >正文

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

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 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 - 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

下一篇

相关文章:

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

golang 函数式编程库samber/mo使用: Result 如果您不了解samber/mo库, 请先阅读上一篇 Option , 这篇讲述结构体Result的使用 Result和Option区别 samber/mo有了Option, 为什么还有Result呢? 我们先看看定义: Opt…...

Python 实现 CHO 指标计算(济坚指数):股票技术分析的利器系列(12)

Python 实现 CHO 指标计算(济坚指数):股票技术分析的利器系列(12) 介绍算法公式 代码rolling函数介绍核心代码计算 CHO 完整代码 介绍 CHO(济坚指数)是一种在金融领域中用于衡量市场波动性和风险的指数 先…...

MySQL的SQL语句

1.MySQL连接 连接命令一般是这样写的 mysql -h$ip -P$port -u$user -p比如:mysql -h127.0.0.1 -P3306 -uroot -p -h 指定连接的主机地址;-P 指定连接端口号;-u 指定用户名 -p指定用户名密码 2.SQL分类 DDL(Data Definition Language) 数据定义语言&…...

ABAP 发送带EXCEL邮件

前言 没啥特殊需求,就是有个库龄报表用户想整邮件发送 实现 用的最简单的XLS文件作为excel附件发送出去 观察XLS文件的纯文本格式,每列之间用TAB制表符分隔,每行之间用回车符分隔 思路也比较明确,在SAP中实现这种格式&#xf…...

Linux Nginx SSL 证书配置正确,扔展示不安全

Nginx SSL 配置 首先我能够确定自己的Nginx SSL是配置正确的: 问题展示 通过浏览器访问自己域名,点击不安全后查看证书,展示的证书并不是自己所配置的证书,如下: 通过curl -vvv https://域名访问返回的证书是过期…...

算法沉淀——动态规划之子数组、子串系列(上)(leetcode真题剖析)

算法沉淀——动态规划之子数组、子串系列 01.最大子数组和02.环形子数组的最大和03.乘积最大子数组04.乘积为正数的最长子数组长度 01.最大子数组和 题目链接:https://leetcode.cn/problems/maximum-subarray/、 给你一个整数数组 nums ,请你找出一个具…...

Flutter GetX 之 暗黑模式

我们紧接上篇文章,今天继续讲解一下强大的 GetX 的另一个功能,就是 暗黑模式 ,在iOS 13开始苹果的应用慢慢的都开始适配 暗黑模式,andr。oid 也慢慢的 开始跟进,截止到目前,商店的大部分应用都已经完成了 暗…...

SQLlabs46关

看看源码 最终我们的id是放到order by后面了 如果我们直接用列去排序 ?sortusername/password username: passward 可以看到顺序是不同的,当然第一列第二列第三列也可以,基本上都是这个原理,那怎么去实现注入呢,我…...

【Android移动开发】Windows10平台安装Android Studio与人工智能算法模型部署案例

目录 一、Android Studio下载地址二、开发环境JDK三、开始安装Android Studio四、案例展示与搭建五、人工智能算法模型移动端部署案例参考 一、Android Studio下载地址 https://developer.android.google.cn/studio/install.html 电脑配置要求: 下载保存在指定文…...

【IDEA】java 项目启动偶现Kotlin 版本问题 error:Kotlin:module was

一、问题描述: error:Kotlin:module was compiled with an incompatible version of kotlin the binary version of its metadata is二、问题原因: jar包版本冲突 三、解决方式: 1、Rebuild Project(推荐☆) 重新构…...

Jmeter系列(2)目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前,需要先对工具的目录有些了解,也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…...

vue基础操作(vue基础)

想到多少写多少把&#xff0c;其他的想起来了在写。也写了一些css的 input框的双向数据绑定 html <input value"123456" type"text" v-model"account" input"accou" class"bottom-line bottom" placeholder"请输入…...

EEA架构

概念 EEA&#xff08;Electrical/Electronic Architecture&#xff09;是一个综合性的概念&#xff0c;它涉及汽车电子电气系统的设计和整合。EEA是汽车上电气部件之间的相互关系&#xff0c;以及包含所有电气部件和电气系统所承载的逻辑功能的组织结构。它是系统的组织结构表…...

【物联网应用案例】牧场牛棚环境管理项目

众所周知&#xff0c;奶牛的健康和牛奶的产量在很大程度上取决于其所在的环境。对于牧场而言&#xff0c;牛棚内的环境更是至关重要。一个适宜的环境不仅能保证奶牛的舒适度&#xff0c;还能提高其产奶量&#xff0c;从而为牧场带来更多的经济效益。 为了更好地理解牛棚环境对…...

【Vue】组件通信组件通信

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 组件通信 组件通信&#xff0c;就是指组件与组件之间的数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据想用其他组件的数据--&…...

瑞_Redis_Redis客户端

文章目录 1 Redis客户端1.1 Redis命令行客户端1.2 图形化桌面客户端1.2.1 资源准备1.2.2 安装1.2.3 建立连接 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的基础篇的Redis客户端章节。由于博主是从B站黑马程序员的《Redis》学习其相关知识&#xff0c;所以本…...

在Ubuntu系统下搭建TDengine集群

目录 一、Ubuntu虚拟机创建 二、系统相关配置 1、设置系统hostname 2、网络配置及IP规划 3、配置FQDN&#xff08;etc/hosts&#xff09; 4、服务端口设置 三、TDengine server安装 1、服务安装 2、修改配置 3、启动taosd 4、服务卸载 四、客户端安装 1、client安…...

Easy-Jmeter: 性能测试平台

目录 写在开始1 系统架构2 表结构设计3 测试平台生命周期4 分布式压测5 压力机管理6 用例管理6.1 新增、编辑用例6.2 调试用例6.3 启动测试6.4 动态控量6.5 测试详情6.6 环节日志6.7 实时数据6.8 测试结果 7 测试记录7 用例分析8 系统部署8.1普通部署8.2容器化部署 写在最后 写…...

Unity3D Lua与C#的相互调用与性能剖析详解

前言 在游戏开发中&#xff0c;经常会遇到Lua与C#之间的相互调用的情况。本文将详细介绍Unity3D中Lua与C#的相互调用的方式&#xff0c;并对其性能进行剖析。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01…...

鸿蒙开发路由跳转踩坑

文章目录 前言常见路由不能跳转问题总结 一、前言 02-25 10:40:10.799 42182-2075594 E C03900/Ace: [manifest_router.cpp(GetPagePath)-(0)] [Engine Log] cant find this page pages 02-25 10:40:10.799 42182-2075594 E C03900/Ace: [page_router_manager.cpp(StartPush…...

在模型广场根据任务需求与预算快速筛选合适的大模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在模型广场根据任务需求与预算快速筛选合适的大模型 对于开发者而言&#xff0c;面对市场上众多的大模型&#xff0c;如何快速找到…...

我跟踪了100位测试工程师的5年成长轨迹,发现成功者都踩准了这三个节点

五年&#xff0c;对于软件测试工程师而言&#xff0c;是一道清晰的分水岭。有人依然困在重复的手工用例里&#xff0c;薪资徘徊在行业均线以下&#xff1b;有人却完成了从执行者到架构者、从成本中心到价值中心的跃迁&#xff0c;成为团队里不可替代的角色。过去五年&#xff0…...

Next.js企业级开发样板Next-Enterprise:一站式集成最佳实践与工具链

1. 项目概述&#xff1a;为什么说 Next-Enterprise 是 Next.js 企业级开发的“瑞士军刀”&#xff1f; 如果你正在用 Next.js 构建一个中大型、对代码质量和开发体验有要求的企业级应用&#xff0c;那你大概率遇到过这些头疼事&#xff1a;项目初始化配置繁琐&#xff0c;得花…...

Adobe-GenP 3.0:Adobe CC通用补丁工具终极完整指南

Adobe-GenP 3.0&#xff1a;Adobe CC通用补丁工具终极完整指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP 3.0是一款功能强大的Adobe CC通用补丁工具…...

极域电子教室破解终极指南:如何在机房环境中重获电脑控制权

极域电子教室破解终极指南&#xff1a;如何在机房环境中重获电脑控制权 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在学校机房被极域电子教室的全屏广播困住&#xf…...

嵌入式处理器IP选型指南:从ARM到RISC-V的权衡与实战

1. 从一场早餐会聊起&#xff1a;为什么32位处理器IP依然是嵌入式开发的硬通货最近在整理资料时&#xff0c;翻到一篇十多年前的老新闻&#xff0c;说的是IP供应商CAST要在DesignCon 2012上办一场免费的早餐研讨会&#xff0c;主题是他们新推出的BA22 32位处理器IP核。新闻里笔…...

C语言--day14

指针的常见操作 指针变量&#xff0c;有两方面的意思 一个指针指向的内容(数据值&#xff0c;一级) 指针变量本身存储的数据 (地址值) #include <stdio.h> int main() {int a 10;int b 0 ;int c 50;int *p NULL;int *q NULL;p &a; // 对指针变量本身进行修改…...

基于YOLOv11与Moondream VLM的本地化实时鸟类检测识别系统实践

1. 项目概述&#xff1a;打造一个本地化的实时鸟类观测站 如果你和我一样&#xff0c;喜欢在自家后院、阳台或者喂食器旁观察鸟类&#xff0c;但又不想一直守在窗边&#xff0c;或者希望记录下那些稍纵即逝的访客&#xff0c;那么这个项目可能就是为你准备的。我最近基于 YOLO…...

【Claude Kubernetes配置终极指南】:20年SRE亲授生产环境零失误部署的7大黄金法则

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude Kubernetes配置的核心理念与演进脉络 Claude 并非原生 Kubernetes 组件&#xff0c;而是 Anthropic 推出的大型语言模型系列&#xff1b;当将其部署于 Kubernetes 集群时&#xff0c;“Claude K…...

Windows XP图标主题完整指南:如何为现代Linux系统注入经典怀旧风格

Windows XP图标主题完整指南&#xff1a;如何为现代Linux系统注入经典怀旧风格 【免费下载链接】Windows-XP Remake of classic YlmfOS theme with some mods for icons to scale right 项目地址: https://gitcode.com/gh_mirrors/win/Windows-XP 还在为现代Linux桌面环…...