Что выведет код 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 ошибок.
Предыдущий вопрос
Что выведет Go: чтение отсутствующего ключа map
Следующий вопрос
Что выведет Go: nil-слайс и пустой слайс
Ещё по теме «Слайсы и мапы изнутри»
- Разбить слайс на части по k на Go
- Удаление дубликатов с сохранением порядка на Go
- Группировка анаграмм на Go
- Циклический сдвиг слайса на Go
- Число подмассивов с суммой k на Go
- Топ-k частых слов на Go
- Что выведет Go: append при полной ёмкости
- Что выведет Go: два append в один подслайс