Clearing a Slice in Go
The article discusses the optimal approach for clearing a slice in Go. The initially proposed solution sought to clear a slice by setting it to an empty range of its own buffer. While this approach appears logical, it does not release the underlying memory associated with the slice.
The recommended solution is to simply set the slice to nil. Nil slices in Go exhibit well-behaved characteristics, and assigning the slice to nil releases the underlying memory to the garbage collector. This approach effectively clears the slice without incurring the limitations of the initial proposal.
To illustrate the effectiveness of this method, consider the following code sample:
package main import ( "fmt" ) func dump(letters []string) { fmt.Println("letters = ", letters) fmt.Println(cap(letters)) fmt.Println(len(letters)) for i := range letters { fmt.Println(i, letters[i]) } } func main() { letters := []string{"a", "b", "c", "d"} dump(letters) // clear the slice letters = nil dump(letters) // add stuff back to it letters = append(letters, "e") dump(letters) }
Output:
letters = [a b c d] 4 4 0 a 1 b 2 c 3 d letters = [] 0 0 letters = [e] 1 1 0 e
As demonstrated, setting the slice to nil clears its contents, including its capacity. This allows for the efficient reuse of the slice without any lingering data from previous operations.
The above is the detailed content of How do you effectively clear a slice in Go and release its underlying memory?. For more information, please follow other related articles on the PHP Chinese website!