How does Go's garbage collection work?