Go 語言的 Lodash 風格庫

在 JavaScript 的世界裏,Lodash 是一個家喻戶曉的工具庫,它提供了豐富的函數,方便開發者操作數組、對象、字符串等等。Lodash 極大地提高了 JavaScript 開發者的效率,也讓代碼更加簡潔易讀。

在 Go 語言 1.18 版本之前,由於缺乏泛型,我們很難實現像 Lodash 這樣功能強大且類型安全的工具庫。然而,隨着 Go 1.18 泛型的引入,這一切都發生了改變。

samber/lo 就是一個基於 Go 1.18+ 泛型的 Lodash 風格工具庫,它提供了大量的實用函數,涵蓋了數組、切片、映射、通道、字符串等多種數據類型,爲 Go 語言開發者帶來了極大的便利。

安裝

使用以下命令即可安裝 samber/lo

go get github.com/samber/lo@v1

samber/lo 庫遵循 SemVer 規範,v1 版本保證 API 的穩定性,不會引入破壞性變更。

使用示例

數組和切片操作

samber/lo 提供了豐富的函數用於操作數組和切片,例如:

even := lo.Filter([]int{1, 2, 3, 4}, func(x int, index int) bool {
    return x%2 == 0
})
// even: []int{2, 4}
stringSlice := lo.Map([]int64{1, 2, 3, 4}, func(x int64, index int) string {
    return strconv.FormatInt(x, 10)
})
// stringSlice: []string{"1""2""3""4"}
sum := lo.Reduce([]int{1, 2, 3, 4}, func(agg int, item int, index int) int {
    return agg + item
}, 0)
// sum: 10
uniqValues := lo.Uniq([]int{1, 2, 2, 1})
// uniqValues: []int{1, 2}

映射操作

samber/lo 也提供了用於操作映射的函數,例如:

keys := lo.Keys(map[string]int{"foo": 1, "bar": 2})
// keys: []string{"foo""bar"}
values := lo.Values(map[string]int{"foo": 1, "bar": 2})
// values: []int{1, 2}
filteredMap := lo.PickBy(map[string]int{"foo": 1, "bar": 2, "baz": 3}, func(key string, value int) bool {
    return value%2 == 1
})
// filteredMap: map[string]int{"foo": 1, "baz": 3}

字符串操作

samber/lo 還提供了一些字符串操作函數,例如:

randomStr := lo.RandomString(10, lo.LettersCharset)
// randomStr: "aBcDeFgHiJ" (example)
pascalCaseStr := lo.PascalCase("hello_world")
// pascalCaseStr: "HelloWorld"

錯誤處理

samber/lo 提供了一些函數幫助我們更方便地處理錯誤,例如:

parsedTime := lo.Must(time.Parse("2006-01-02""2022-01-15"))
// parsedTime: 2022-01-15 00:00:00 +0000 UTC
success := lo.Try(func() error {
    panic("error")
    return nil
})
// success: false

併發支持

samber/lo 提供了 lop 子包,其中包含了專門爲併發場景設計的函數,例如:

lop.ForEach([]string{"hello""world"}, func(x string, index int) {
    println(x)
})
// 輸出 "hello" 和 "world",順序可能不確定
result := lop.Map([]int64{1, 2, 3, 4}, func(x int64, index int) string {
    return strconv.FormatInt(x, 10)
})
// result: []string{"1""2""3""4"}

性能

samber/lo 基於泛型實現,相比於使用反射的庫,性能有顯著提升。同時,它的性能也與手寫 for 循環相當。

總結

samber/lo 是一個非常實用的 Go 語言工具庫,它提供了類似 Lodash 的豐富功能,並利用泛型實現了類型安全和高性能。它可以幫助 Go 語言開發者更方便地操作各種數據類型,提高開發效率並使代碼更加簡潔易讀。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/uaLJ64aYlk9YrhoMPT0sqA