Skip to content
Go

Generics

Using generics in Go 1.18+.

By EZ4Code Team
genericgenerics

Code

package main

import "fmt"

func Map[T, U any](arr []T, fn func(T) U) []U {
    result := make([]U, len(arr))
    for i, v := range arr {
        result[i] = fn(v)
    }
    return result
}

func Filter[T any](arr []T, fn func(T) bool) []T {
    var result []T
    for _, v := range arr {
        if fn(v) {
            result = append(result, v)
        }
    }
    return result
}

type Number interface {
    int | int64 | float64
}

func Sum[T Number](arr []T) T {
    var sum T
    for _, v := range arr {
        sum += v
    }
    return sum
}

func main() {
    nums := []int{1, 2, 3, 4, 5}
    doubled := Map(nums, func(n int) int { return n * 2 })
    evens := Filter(nums, func(n int) bool { return n%2 == 0 })
    fmt.Println(doubled, evens, Sum(nums))
}

Explanation

Go generics use type parameters [T any]; types can be constrained via interfaces.

More Go Snippets