82/100 Dias de Golang - Biblioteca lo
Table of Contents
#
Biblioteca lo
Dando uma explorada no ecossistema de bibliotecas do golang, e encontrei a lo. Ela traz para o Go uma série de funções inspiradas na programação funcional — como Map, Filter, Reduce, GroupBy e FlatMap. Vamos instalar a lib e fazer alguns testes:
go get github.com/samber/lo
Na programação funcional, map é uma função que aplica uma determinada função a cada elemento de uma coleção, no nosso caso aqui um slice, e retorna uma nova coleção contendo os resultados. Aqui vamos fazer o quadrado de cada elemento do slice.
package main
import (
"fmt"
"github.com/samber/lo"
)
func main() {
numbers := []int{1, 2, 3, 4, 5}
squares := lo.Map(numbers, func(x int, _ int) int {
return x * x
})
fmt.Println(squares)
}
A função filter
, filtra elementos que satisfazem uma condição:
evens := lo.Filter(numbers, func(x int, _ int) bool {
return x%2 == 0
})
fmt.Println(evens)
A função reduce
itera sobre os elementos do slice, aplicando a função fornecida a um acumulador e ao elemento atual, atualizando o acumulador a cada passo.
sum := lo.Reduce(numbers, func(acc, x int, _ int) int {
return acc + x
}, 0)
fmt.Println(sum)
Nesse caso o resultado é 15, pois é a soma de todos os elementos no slice.
A documentação da bilioteca é muito boa e tem vários exemplos. No python temos o functools
que tem a mesma função, achei legal encontrar uma lib parecida.