GitPedia

Genesis

All generic functions for Go you ever need!

From life4ยทUpdated May 27, 2026ยทView on GitHubยท

Generic functions for Go. Bringing the beauty of functional programming in Go 1.18+. The project is written primarily in Go, distributed under the MIT License license, first published in 2019. Key topics include: elixir, enum, erlang, fp, functional-programming.

Latest release: v1.10.3

Genesis

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.Shrink is 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, and Reduce for data processing on steroids.
  • FilterAsync, MapAsync, and ReduceAsync for making your code fast and concurrent with a single line of code.
  • Grow and Shrink for reducing memory allocations.
  • Permutations and Product for simple iterations.
  • Shuffle and Sort for randomization.
  • Any and All for simple flow control.
  • Range, Count, and Cycle for generating sequences.

And much more.

๐Ÿ’พ Installation

bash
go get github.com/life4/genesis

๐Ÿ‘€ Examples

Find the minimal value in a slice of ints:

go
lambdas.Must(slices.Min([]int{42, 7, 13})) == 7

Double values in a slice of ints:

go
slices.Map([]int{4, 8, 15}, func(el int) int { return el * 2 })

Concurrently check status codes for multiple URLs:

go
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 }, )

๐Ÿ”จ Usage

Genesis contains the following packages:

See ๐Ÿ“„ DOCUMENTATION for more info.

Contributors

Showing top 9 contributors by commit count.

View all contributors on GitHub โ†’

This article is auto-generated from life4/genesis via the GitHub API.Last fetched: 6/28/2026