samber/lo 是一個流行的 Go 語言函數式編程庫,提供了許多常見的函數式編程操作,如 Map , Filter , Reduce 等。它可以幫助 Go 開發者更方便地進行函數式編程。

# 安裝

使用 go get 命令安裝 samber/lo :

go get -u github.com/samber/lo

# 主要功能

  1. Map: 對 slice 或 map 中的每個元素應用一個函數,並返回一個新的 slice 或 map。
numbers := []int{1, 2, 3, 4, 5}
squares := lo.Map(numbers, func(x int) int {
    return x * x
})
// squares = [1 4 9 16 25]
  1. Filter: 過濾 slice 或 map 中符合條件的元素,並返回一個新的 slice 或 map。
numbers := []int{1, 2, 3, 4, 5}
evens := lo.Filter(numbers, func(x int) bool {
    return x%2 == 0
})
// evens = [2 4]
  1. Reduce: 對 slice 或 map 中的元素進行累積,返回一個單一的值。
numbers := []int{1, 2, 3, 4, 5}
sum := lo.Reduce(numbers, func(acc int, x int) int {
    return acc + x
}, 0)
// sum = 15
  1. Find: 在 slice 或 map 中查找符合條件的第一個元素。
numbers := []int{1, 2, 3, 4, 5}
first_even := lo.Find(numbers, func(x int) bool {
    return x%2 == 0
})
// first_even = 2
  1. Contains: 檢查 slice 或 map 中是否包含某個元素。
numbers := []int{1, 2, 3, 4, 5}
contains_3 := lo.Contains(numbers, 3)
// contains_3 = true
  1. Keys/Values: 從 map 中獲取所有的 key 或 value。
myMap := map[string]int{"a": 1, "b": 2, "c": 3}
keys := lo.Keys(myMap)
// keys = ["a", "b", "c"]
values := lo.Values(myMap)
// values = [1 2 3]

這只是 samber/lo 提供的一些主要功能,它還有許多其他有用的函數,如 Uniq , Chunk , Reverse 等。更多詳細信息請查看 Github 庫

# 為什麼使用 samber/lo ?

Go 語言中缺乏內置的函數式編程支持,使用 samber/lo 可以:

  1. 提高代碼可讀性和可維護性。
  2. 減少重複的樣板代碼。
  3. 支持更加函數式的編程風格。
  4. 提高開發效率。

總之, samber/lo 是 Go 開發者的一個很好的函數式編程工具,值得學習和使用。