A Practical Guide to Generics in Go

Learn how to use Go generics effectively with real-world examples. From basic type parameters to constraints and generic data structures.

· MasterGo Team
generics advanced tutorial

Go 1.18 introduced generics, one of the most anticipated features in the language’s history. Here’s how to use them effectively.

Basic Syntax

func Min[T int | float64](a, b T) T {
if a < b {
return a
}
return b
}

Type Constraints

Instead of listing types inline, use an interface as a constraint:

type Number interface {
int | int64 | float64
}
func Sum[T Number](nums []T) T {
var total T
for _, n := range nums {
total += n
}
return total
}

When to Use Generics

  • Writing reusable data structures (slices, maps, trees)
  • Utility functions that work with multiple numeric types
  • Avoiding interface{} / any with type assertions

When NOT to Use Generics

  • When a simple interface would work
  • When you’re only using one or two concrete types
  • When generics make the code harder to read

Conclusion

Generics are a powerful addition to Go, but they should be used sparingly. Remember the Go proverb: clear is better than clever.