samber/lo 库的使用方法: condition
samber/lo 是一个 Go 语言库,使用泛型实现了一些常用的操作函数,如 Filter、Map 和 FilterMap。汇总目录页面
这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/lo 库中条件相关的函数。
Ternary
三元运算符, 第一个参数是条件,如果为真则返回第二个参数,否则返回第三个参数。
result := lo.Ternary(true, "a", "b")
// "a"
result := lo.Ternary(false, "a", "b")
// "b"
[play]
TernaryF
和 Ternary 类似,但是第二个和第三个参数是函数。
result := lo.TernaryF(true, func() string { return "a" }, func() string { return "b" })
// "a"
result := lo.TernaryF(false, func() string { return "a" }, func() string { return "b" })
// "b"
对于避免在初始化时进行nil指针解引用或避免运行不必要的代码很有用。
var s *string
someStr := TernaryF(s == nil, func() string { return uuid.New().String() }, func() string { return *s })
// ef782193-c30c-4e2e-a7ae-f8ab5e125e02
[play]
If / ElseIf / Else
链式条件判断,返回第一个为真的值。
result := lo.If(true, 1).
ElseIf(false, 2).
Else(3)
// 1
result := lo.If(false, 1).
ElseIf(true, 2).
Else(3)
// 2
result := lo.If(false, 1).
ElseIf(false, 2).
Else(3)
// 3
使用lo.IfF等函数时, 第二个参数是函数:
result := lo.IfF(true, func () int {
return 1
}).
ElseIfF(false, func () int {
return 2
}).
ElseF(func () int {
return 3
})
// 1
也可以混合使用:
result := lo.IfF(true, func () int {
return 1
}).
Else(42)
// 1
[play]
Switch / Case / Default
链式Switch语句,返回第一个匹配的值。
result := lo.Switch(1).
Case(1, "1").
Case(2, "2").
Default("3")
// "1"
result := lo.Switch(2).
Case(1, "1").
Case(2, "2").
Default("3")
// "2"
result := lo.Switch(42).
Case(1, "1").
Case(2, "2").
Default("3")
// "3"
或者使用回调函数:
result := lo.Switch(1).
CaseF(1, func() string {
return "1"
}).
CaseF(2, func() string {
return "2"
}).
DefaultF(func() string {
return "3"
})
// "1"
混用:
result := lo.Switch(1).
CaseF(1, func() string {
return "1"
}).
Default("42")
// "1"
[play]