Что выведет код Senior Слайсы и мапы изнутри обновлено

Что выведет Go: слайсы в мапе и общий массив

Вопрос

Что выведет программа? Go 1.23, в go.mod указано go 1.23.

package main

import "fmt"

func main() {
    base := make([]int, 0, 4)
    m := map[string][]int{}
    m["a"] = append(base, 1)
    m["b"] = append(base, 2)
    fmt.Println(m["a"], m["b"])
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: [2] [2]. У base ёмкость 4, оба append пишут в элемент 0 одного и того же массива.

Что выведет

[2] [2]

Разбор

У base ёмкость 4, оба append пишут в элемент 0 одного и того же массива. Второй затирает первый, и оба слайса в мапе видят [2]. Классический баг, когда слайс-«шаблон» переиспользуют для нескольких значений.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.