Будут напечатаны две строки [0], затем возникнет panic: индекс 1 находится за пределами длины nums. Третьего успешного вывода не будет.
package main
Будут напечатаны две строки [0], затем возникнет panic: индекс 1 находится за пределами длины nums. Третьего успешного вывода не будет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
package main import "fmt"
func main() { nums := make([]int, 1, 2) fmt.Println(nums)
appendSlice(nums, 1024)
fmt.Println(nums)
mutateSlice(nums, 1, 512)
fmt.Println(nums)
}
func appendSlice(sl []int, val int) { sl = append(sl, val) }
func mutateSlice(sl []int, idx, val int) { sl[idx] = val }
Ответ
Будут напечатаны две строки [0], затем возникнет panic: индекс 1 находится за пределами длины nums. Третьего успешного вывода не будет.
appendSlice получает копию заголовка слайса. append использует общий массив с capacity 2 и записывает 1024, но новая длина остаётся только в локальном sl. У nums длина по-прежнему 1, а индексация проверяет именно len, не cap. Исправление — вернуть новый слайс и присвоить nums = appendSlice(...), изменив сигнатуру функции.