NOTE
Go Stack Management
Small growable goroutine stacks, stack growth, copying, and escape-driven heap allocation.
This is a historical learning note and may contain outdated or incomplete understanding.
Each goroutine starts with a relatively small stack that can grow as needed. The runtime can move/copy stacks and adjust references according to its stack-management implementation, which is one reason goroutines are cheaper than assigning a large fixed native stack to each task.
Whether a value lives on a goroutine stack or heap is decided by compiler escape analysis and other implementation details; source syntax such as new does not by itself determine heap allocation.