samber/lo 库的使用方法:Error

2024-02-24 06:44
文章标签 使用 方法 error lo samber

本文主要是介绍samber/lo 库的使用方法:Error,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

samber/lo 库的使用方法:Error

samber/lo 是一个 Go 语言库,提供了一些常用的集合操作函数,如 Filter、Map 和 FilterMap。
这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/lo 库中Error相关的函数。汇总目录页面

Validate

当条件不满足时,创建一个错误。

slice := []string{"a"}
val := lo.Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)
// error("Slice should be empty but contains [a]")slice := []string{}
val := lo.Validate(len(slice) == 0, "Slice should be empty but contains %v", slice)
// nil

[play]

Must

对函数调用进行包装,函数的返回需要两个参数,第一个是值,第二个是错误。如果第二个参数是错误或者false,那么就会panic,否则返回值。

val := lo.Must(time.Parse("2006-01-02", "2022-01-15"))
// 2022-01-15val := lo.Must(time.Parse("2006-01-02", "bad-value"))
// panics

[play]

Must{0->6}

和Must一样,但是返回多个值。

func example0() (error)
func example1() (int, error)
func example2() (int, string, error)
func example3() (int, string, time.Date, error)
func example4() (int, string, time.Date, bool, error)
func example5() (int, string, time.Date, bool, float64, error)
func example6() (int, string, time.Date, bool, float64, byte, error)lo.Must0(example0())
val1 := lo.Must1(example1())    // alias to Must
val1, val2 := lo.Must2(example2())
val1, val2, val3 := lo.Must3(example3())
val1, val2, val3, val4 := lo.Must4(example4())
val1, val2, val3, val4, val5 := lo.Must5(example5())
val1, val2, val3, val4, val5, val6 := lo.Must6(example6())

可以包装像func (...) (..., ok bool)这样的函数。当ok为false时,会panic。

// math.Signbit(float64) bool
lo.Must0(math.Signbit(v))// bytes.Cut([]byte,[]byte) ([]byte, []byte, bool)
before, after := lo.Must2(bytes.Cut(s, sep))

可以通过添加一些类似printf的参数来给panic消息添加上下文。

val, ok := lo.Find(myString, func(i string) bool {return i == requiredChar
})
lo.Must0(ok, "'%s' must always contain '%s'", myString, requiredChar)list := []int{0, 1, 2}
item := 5
lo.Must0(lo.Contains[int](list, item), "'%s' must always contain '%s'", list, item)
...

[play]

Try

调用函数,如果出现错误或者panic,返回false。

ok := lo.Try(func() error {panic("error")return nil
})
// falseok := lo.Try(func() error {return nil
})
// trueok := lo.Try(func() error {return fmt.Errorf("error")
})
// false

[play]

Try{0->6}

和Try一样,但是回调函数返回对应数量的变量。

ok := lo.Try2(func() (string, error) {panic("error")return "", nil
})
// false

[play]

TryOr

调用函数,如果出现错误或者panic,返回默认值。

str, ok := lo.TryOr(func() (string, error) {panic("error")return "hello", nil
}, "world")
// world
// falsestr, ok := lo.TryOr(func() error {return "hello", nil
}, "world")
// hello
// truestr, ok := lo.TryOr(func() error {return "hello", fmt.Errorf("error")
}, "world")
// world
// false

[play]

TryOr{0->6}

和TryOr一样,但是回调函数返回对应数量的变量及error。

str, nbr, ok := lo.TryOr2(func() (string, int, error) {panic("error")return "hello", 42, nil
}, "world", 21)
// world
// 21
// false

[play]

TryWithErrorValue

和Try一样,但是返回传给panic的值。

err, ok := lo.TryWithErrorValue(func() error {panic("error")return nil
})
// "error", false

[play]

TryCatch

和Try一样,但是在出现错误时调用catch函数。

caught := falseok := lo.TryCatch(func() error {panic("error")return nil
}, func() {caught = true
})
// false
// caught == true

[play]

TryCatchWithErrorValue

TryWithErrorValue一样,但是在出现错误时调用catch函数。

caught := falseok := lo.TryCatchWithErrorValue(func() error {panic("error")return nil
}, func(val any) {caught = val == "error"
})
// false
// caught == true

[play]

ErrorsAs

是一个快捷方式,相当于:

err := doSomething()var rateLimitErr *RateLimitError
if ok := errors.As(err, &rateLimitErr); ok {// retry later
}

lo实现:

err := doSomething()if rateLimitErr, ok := lo.ErrorsAs[*RateLimitError](err); ok {// retry later
}

[play]

汇总目录页面

这篇关于samber/lo 库的使用方法:Error的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/741267

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —