Когда горутине нужно больше стека, рантайм выделяет новый в 2 раза больше, побайтово копирует содержимое старого стека и обновляет все указатели на стек. Указатели обновляются потому что адреса изменились — рантайм знает layout стека и может найти все pointer-содержащие слоты. После копирования старый стек освобождается. Это безопасно только потому что Go точно знает, где на стеке лежат указатели благодаря информации от компилятора (stack maps).