Выбор ответа Junior Слайсы и мапы изнутри спрашивают часто обновлено
append внутри функции и слайс снаружи
Вопрос
Что выведет код?
func add(s []int) { s = append(s, 4) }
func main() {
s := []int{1, 2, 3}
add(s)
fmt.Println(s, len(s))
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: [1 2 3] 3. В add приходит копия заголовка. append меняет длину только у локальной копии s, у вызывающего len остаётся 3.
Варианты ответа
[1 2 3 4] 4[1 2 3] 4[1 2 3 4] 3[1 2 3] 3правильный ответ
Разбор
В add приходит копия заголовка. append меняет длину только у локальной копии s, у вызывающего len остаётся 3. Даже если бы в массиве было место и четвёрка записалась туда, снаружи её не видно, потому что длина внешнего слайса 3. Чтобы изменения длины дошли наружу, функция возвращает новый слайс: s = add(s).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Слайсы и мапы изнутри»
- Разбить слайс на части по k на Go
- Удаление дубликатов с сохранением порядка на Go
- Группировка анаграмм на Go
- Циклический сдвиг слайса на Go
- Число подмассивов с суммой k на Go
- Топ-k частых слов на Go
- Что выведет Go: append при полной ёмкости
- Что выведет Go: два append в один подслайс