samber/lo 库的使用方法:type
samber/lo 是一个 Go 语言库,提供了一些常用的集合操作函数,如 Filter、Map 和 FilterMap。
这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/lo 库中type相关的函数。汇总目录页面
IsNil
检查一个值是否为 nil,或者它是否是一个引用类型且其底层值为 nil。
var x int
IsNil(x)
// false 因为 x 是一个值类型var k struct{}
IsNil(k)
// falsevar i *int
IsNil(i)
// true 因为 i 是一个指针类型,且其底层值为 nilvar ifaceWithNilValue any = (*string)(nil)
IsNil(ifaceWithNilValue)
// true 因为 ifaceWithNilValue 是一个指针类型,且其底层值为 nil
ifaceWithNilValue == nil
// false 因为尽管 ifaceWithNilValue 的底层值是 nil,但 ifaceWithNilValue 本身并不是 nil。这是因为在 Go 中,一个接口值是由它的类型和值两部分组成的,只有当这两部分都是 nil 时,这个接口值才是 nil。在这个例子中,ifaceWithNilValue 的类型是 *string,所以它不是 nil。
ToPtr
返回一个指向值的指针的拷贝。
ptr := lo.ToPtr("hello world")
// *string{"hello world"}
EmptyableToPtr
如果值不为空,则返回一个指针拷贝,否则返回 nil。
ptr := lo.EmptyableToPtr[[]int](nil)
// nilptr := lo.EmptyableToPtr[string]("")
// nilptr := lo.EmptyableToPtr[[]int]([]int{})
// *[]int{}ptr := lo.EmptyableToPtr[string]("hello world")
// *string{"hello world"}
FromPtr
返回指针的值,如果指针为空则返回空值。
str := "hello world"
value := lo.FromPtr(&str)
// "hello world"value := lo.FromPtr[string](nil)
// ""
FromPtrOr
返回指针的值,如果指针为空则返回指定的值。
str := "hello world"
value := lo.FromPtrOr(&str, "empty")
// "hello world"value := lo.FromPtrOr[string](nil, "empty")
// "empty"
ToSlicePtr
返回值的指针拷贝的切片。
ptr := lo.ToSlicePtr([]string{"hello", "world"})
// []*string{"hello", "world"}
ToAnySlice
返回一个所有元素都映射到 any
类型的切片。
any 是一个类型参数约束,它在 Go 1.18 版本中引入,作为泛型的一部分, any 可以匹配任何类型。
elements := lo.ToAnySlice([]int{1, 5, 1})
// []any{1, 5, 1}
FromAnySlice
将一个 any
类型的切片转换为指定类型的切片。如果转换失败,则返回 false。
elements, ok := lo.FromAnySlice([]any{"foobar", 42})
// []string{}, falseelements, ok := lo.FromAnySlice([]any{"foobar", "42"})
// []string{"foobar", "42"}, true
Empty
返回空值
lo.Empty[int]()
// 0
lo.Empty[string]()
// ""
lo.Empty[bool]()
// false
IsEmpty
判断一个值是否为零值。
lo.IsEmpty(0)
// true
lo.IsEmpty(42)
// falselo.IsEmpty("")
// true
lo.IsEmpty("foobar")
// falsetype test struct {foobar string
}lo.IsEmpty(test{foobar: ""})
// true
lo.IsEmpty(test{foobar: "foobar"})
// false
IsNotEmpty
判断一个值是否不是零值。
lo.IsNotEmpty(0)
// false
lo.IsNotEmpty(42)
// truelo.IsNotEmpty("")
// false
lo.IsNotEmpty("foobar")
// truetype test struct {foobar string
}lo.IsNotEmpty(test{foobar: ""})
// false
lo.IsNotEmpty(test{foobar: "foobar"})
// true
Coalesce
返回第一个非空的参数。参数必须是可比较的。 如果没有非空参数,ok 为 false。
result, ok := lo.Coalesce(0, 1, 2, 3)
// 1 trueresult, ok := lo.Coalesce("")
// "" falsevar nilStr *string
str := "foobar"
result, ok := lo.Coalesce[*string](nil, nilStr, &str)
// &"foobar" true
汇总目录页面