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.