Ответ
В Go (Golang) данные попадают в кучу (heap) в следующих случаях:
- Когда их размер неизвестен во время компиляции (например, создание среза с динамическим размером через
make). - Когда данные должны пережить функцию, в которой были созданы (например, возврат указателя из функции).
- Когда данные используются за пределами текущего стека (например, передача в горутины или сохранение в глобальных переменных).
Пример:
func createSlice() *[]int {
s := make([]int, 10) // выделяется в куче, так как возвращается указатель
return &s
}
func main() {
p := createSlice() // данные из кучи доступны после вызова функции
}