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 |
| }) |
| |
- Filter: 過濾 slice 或 map 中符合條件的元素,並返回一個新的 slice 或 map。
| numbers := []int{1, 2, 3, 4, 5} |
| evens := lo.Filter(numbers, func(x int) bool { |
| return x%2 == 0 |
| }) |
| |
- Reduce: 對 slice 或 map 中的元素進行累積,返回一個單一的值。
| numbers := []int{1, 2, 3, 4, 5} |
| sum := lo.Reduce(numbers, func(acc int, x int) int { |
| return acc + x |
| }, 0) |
| |
- Find: 在 slice 或 map 中查找符合條件的第一個元素。
| numbers := []int{1, 2, 3, 4, 5} |
| first_even := lo.Find(numbers, func(x int) bool { |
| return x%2 == 0 |
| }) |
| |
- Contains: 檢查 slice 或 map 中是否包含某個元素。
| numbers := []int{1, 2, 3, 4, 5} |
| contains_3 := lo.Contains(numbers, 3) |
| |
- Keys/Values: 從 map 中獲取所有的 key 或 value。
| myMap := map[string]int{"a": 1, "b": 2, "c": 3} |
| keys := lo.Keys(myMap) |
| |
| values := lo.Values(myMap) |
| |
這只是 samber/lo
提供的一些主要功能,它還有許多其他有用的函數,如 Uniq
, Chunk
, Reverse
等。更多詳細信息請查看 Github 庫。
# 為什麼使用 samber/lo
?
Go 語言中缺乏內置的函數式編程支持,使用 samber/lo
可以:
- 提高代碼可讀性和可維護性。
- 減少重複的樣板代碼。
- 支持更加函數式的編程風格。
- 提高開發效率。
總之, samber/lo
是 Go 開發者的一個很好的函數式編程工具,值得學習和使用。