Skip to content

Latest commit

 

History

History
32 lines (23 loc) · 776 Bytes

produce-the-zero-value-of-a-generic-type.md

File metadata and controls

32 lines (23 loc) · 776 Bytes

Produce The Zero Value For A Generic Type

While writing a pop function that would work with slices of a generic type, I ran into the issue of needing to produce a zero value of type T when returning early for an empty slice.

The way to arbitrarily get the zero value of a generic in Go is with *new(T).

I was able to use this in my Pop function like so:

func Pop[T any](slice []T) (T, error) {
	if len(slice) == 0 {
		return *new(T), fmt.Errorf("cannot pop an empty slice")
	}

	lastItem := slice[len(slice)-1]

	slice = slice[:len(slice)-1]

	return lastItem, nil
}

If this is happening in multiple functions and we want a more self-documenting approach, we can pull it out into a function zero:

func zero[T any]() T {
	return *new(T)
}