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
匯總目錄頁面