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 *stringsomeStr := 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)
// 1result := lo.If(false, 1).ElseIf(true, 2).Else(3)
// 2result := 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]