Generic functions for Go. Bringing the beauty of functional programming in Go 1.18+.
π Features:
- π οΈ Over 170 generic functions for channels, maps, and slices.
- πͺ Uses the power of Go 1.18+ generics.
- π§ No code generation.
- πͺΆ No dependencies (except is for testing).
- π Pure Go.
- πͺ© Sync and async versions of all the main functions.
π¨ When to use:
- π In a big project. More the project grows, more you find yourself writing boring generic code like "Min". Break the cycle.
- π€ In a team project. Each line of code you write means higher maintenance cost that in turn means loosing time and money.
- πΆ In a pet project. Leave the boring stuff to us, focus on the fun parts.
- π When readability matters.
slices.Shrinkis a function with a human-friendly name and documentation.s[:len(s):len(s)]is a jibberish and black magic. Prefer the former. - π When you miss some conveniences that come in other languages out-of-the-box.
- π When you write a highly concurrent code and don't want to manually implement code for cancellation, results collection and ordering, worker groups, context, etc.
π¦ What's inside:
Filter,Map, andReducefor data processing on steroids.FilterAsync,MapAsync, andReduceAsyncfor making your code fast and concurrent with a single line of code.GrowandShrinkfor reducing memory allocations.PermutationsandProductfor simple iterations.ShuffleandSortfor randomization.AnyandAllfor simple flow control.Range,Count, andCyclefor generating sequences.
And much more.
go get github.com/life4/genesisFind the minimal value in a slice of ints:
lambdas.Must(slices.Min([]int{42, 7, 13})) == 7Double values in a slice of ints:
slices.Map([]int{4, 8, 15}, func(el int) int { return el * 2 })Concurrently check status codes for multiple URLs:
urls := []string{
"https://go.dev/",
"https://golang.org/",
"https://google.com/",
}
codes := slices.MapAsync(
urls, 0,
func(url string) int {
return lambdas.Must(http.Get(url)).StatusCode
},
)Genesis contains the following packages:
- π slices: generic functions for slices (
[]T). - πΊ maps: generic functions for maps (
map[K]V). - πΊ channels: generic function for channels (
chan T). - βοΈ sets: generic function for sets (
map[T]struct{}). - π lambdas: helper generic functions to work with
slices.Mapand similar.
See π DOCUMENTATION for more info.