Когда map shrinks?

Middle+
219 просмотров
AFK Offer AI

Короткий ответ — никогда. Map в Go не уменьшается автоматически после удаления элементов. Buckets остаются аллоцированными. Есть один случай sameSizeGrow — когда много overflow buckets но мало элементов, map может перестроиться без увеличения. Но это не уменьшение. Если нужно реально освободить память — создай новую map и скопируй оставшиеся элементы. В Go 1.21+ есть clear() — очищает но не shrinks.

Следующий вопрос

Что выведет: s := []int{1,2,3}; s2 := s[:2]; s2 = append(s2, 4); fmt.Println(s)?