100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace

Go Generics Cheat Sheet

Go Generics Cheat Sheet

Explains Go's generic type parameters, type constraints, the built-in constraints package, and how to write reusable generic functions and data structures.

2 PagesIntermediateMar 28, 2026

Generic Functions

Declaring a function with a type parameter.

go
// T is constrained to types supporting comparison operatorsfunc Max[T int | float64 | string](a, b T) T {	if a > b {		return a	}	return b}func main() {	fmt.Println(Max(3, 7))         // 7 (T inferred as int)	fmt.Println(Max(2.5, 1.1))     // 2.5 (T inferred as float64)	fmt.Println(Max("go", "rust")) // "rust"}

Custom Type Constraints

Defining reusable constraint interfaces.

go
type Number interface {	~int | ~int32 | ~int64 | ~float32 | ~float64}// ~int allows any type whose underlying type is int (e.g. type MyInt int)func Sum[T Number](nums []T) T {	var total T	for _, n := range nums {		total += n	}	return total}// comparable permits == and !=func Contains[T comparable](s []T, target T) bool {	for _, v := range s {		if v == target {			return true		}	}	return false}

Constraint Keywords

Syntax used when writing type constraints.

  • any- Alias for interface{}; permits any type, no operations besides assignment
  • comparable- Built-in constraint allowing == and !=; required for map keys
  • ~T (tilde)- Matches T and any type whose underlying type is T (approximation element)
  • | (union)- Combines multiple types/terms into one constraint, e.g. int | float64
  • constraints.Ordered- From golang.org/x/exp/constraints; types supporting <, <=, >, >=
  • type set- A constraint interface defines the set of permitted types, not just methods

Generic Types

A generic stack implementation using a type parameter.

go
type Stack[T any] struct {	items []T}func (s *Stack[T]) Push(item T) {	s.items = append(s.items, item)}func (s *Stack[T]) Pop() (T, bool) {	var zero T	if len(s.items) == 0 {		return zero, false	}	last := s.items[len(s.items)-1]	s.items = s.items[:len(s.items)-1]	return last, true}s := Stack[int]{}s.Push(1)s.Push(2)v, ok := s.Pop() // v == 2, ok == true

Built-in Generic Helpers

Generic functions available in modern Go without extra imports.

  • min(a, b)- Built-in generic function (Go 1.21+) returning the smaller of two ordered values
  • max(a, b)- Built-in generic function (Go 1.21+) returning the larger of two ordered values
  • clear(m)- Built-in generic function that empties a map or zeroes a slice's elements
  • slices.Sort(s)- Sorts a slice of any ordered type in place, from the slices package
  • slices.Contains(s, v)- Reports whether v is present in slice s
  • maps.Keys(m)- Returns an iterator over a map's keys, from the maps package
Pro Tip

Prefer defining the narrowest constraint you need (e.g. a custom Number interface) instead of `any` — it keeps compile-time type checking useful and avoids reflection-like escape hatches.

Was this cheat sheet helpful?

Explore Topics

#GoGenerics#GoGenericsCheatSheet#Programming#Intermediate#GenericFunctions#CustomTypeConstraints#ConstraintKeywords#GenericTypes#Functions#CheatSheet#SkillVeris