How do you effectively clear a slice in Go and release its underlying memory?

Barbara Streisand
Release: 2024-11-21 05:36:11
Original
549 people have browsed it

How do you effectively clear a slice in Go and release its underlying memory?

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)
}
Copy after login

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
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template