本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!