Pular para o conteúdo principal

victorstein.dev

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.