Skip to content
/ genesis Public

All generic functions for Go you ever need!

License

Notifications You must be signed in to change notification settings

life4/genesis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0d94ca9 Β· Nov 19, 2024
Sep 19, 2023
Nov 14, 2023
Sep 19, 2023
Nov 19, 2024
Nov 14, 2023
Sep 19, 2023
Sep 19, 2023
Apr 23, 2024
Sep 19, 2023
Aug 20, 2023
May 11, 2023
Sep 13, 2019
Sep 19, 2023
Sep 11, 2023
Sep 19, 2023
Dec 21, 2021
Dec 21, 2021
Oct 31, 2019

Repository files navigation

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

go get github.com/life4/genesis

πŸ‘€ Examples

Find the minimal value in a slice of ints:

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

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

πŸ”¨ Usage

Genesis contains the following packages:

See πŸ“„ DOCUMENTATION for more info.