Go: Clear a slice

To remove all elements, set the slice to nil:

a := []string{"A", "B", "C", "D", "E"}
a = nil
fmt.Println(a, len(a), cap(a)) // [] 0 0

This will release the underlying array to the garbage collector (assuming there are no other references).

Note that nil slices and empty slices are very similar:

  • they look the same when printed,
  • they have zero length and capacity,
  • they can be used with the same effect in for loops and append functions.

Keep allocated memory

To keep the underlying array, slice the slice to zero length:

a := []string{"A", "B", "C", "D", "E"}
a = a[:0]
fmt.Println(a, len(a), cap(a)) // [] 0 5

If the slice is extended again, the original data reappears:

fmt.Println(a[:2]) // [A B]

Comments

Be the first to comment!