Search code examples
gomemory-managementgarbage-collection

How can I free memory in Go?


I've started to learn Go, and found something I'm not able to find information about.

For example, if I'm making my own list structure,

type elem struct {
    prev  *elem
    next  *elem
    value string
}

And adding new elements to it with

Current.next = &elem{}

How should I remove them? I mean, how can I remove data of elem from memory, not just from the list?


Solution

  • Go has garbage collection. It will scan for data that has no pointer to it and remove it from heap (Garbage collector is running beside your program). The only thing you should do is:

    Current.next = nil
    

    Your elem{} will be removed from memory eventually after you remove all pointers to it (it's not deterministic. Can't tell exactly when elem{} will be released). There are different implementations of garbage collection; Go's implementation may change at any time.

    If Current goes out of scope, you don't even need to set next to nil.