官網:https://github.com/samber/lo
samber/lo 是一個流行的 Go 語言函數式編程庫,提供了許多常見的函數式編程操作,如 Map , Filter , Reduce 等。它可以幫助 Go 開發者更方便地進行函數式編程。
# 安裝
使用 go get 命令安裝 samber/lo :
go get -u github.com/samber/lo
# 主要功能
- 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] |
- 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] |
- 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 |
- 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 |
- Contains: 檢查 slice 或 map 中是否包含某個元素。
numbers := []int{1, 2, 3, 4, 5} | |
contains_3 := lo.Contains(numbers, 3) | |
// contains_3 = true |
- 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 可以:
- 提高代碼可讀性和可維護性。
- 減少重複的樣板代碼。
- 支持更加函數式的編程風格。
- 提高開發效率。
總之, samber/lo 是 Go 開發者的一個很好的函數式編程工具,值得學習和使用。