В типичной реализации с достаточной capacity у foo результат — [1 2 3 5] [1 2 3 5]. Но точную стратегию роста capacity язык не фиксирует, поэтому важна оговорка о совместном массиве.
Определение вывода при использовании функции append
В типичной реализации с достаточной capacity у foo результат — [1 2 3 5] [1 2 3 5]. Но точную стратегию роста capacity язык не фиксирует, поэтому важна оговорка о совместном массиве.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно понять, какие данные появятся в консоли после выполнения программы, учитывая особенности работы функции append и то, как слайсы взаимодействуют при присваивании.
func main() {
var foo []int
var bar []int
foo = append(foo, 1)
foo = append(foo, 2)
foo = append(foo, 3)
bar = append(foo, 4)
foo = append(foo, 5)
fmt.Println(foo, bar)
}
Ответ
В типичной реализации с достаточной capacity у foo результат — [1 2 3 5] [1 2 3 5]. Но точную стратегию роста capacity язык не фиксирует, поэтому важна оговорка о совместном массиве.
После третьего append часто остаётся свободное место. bar=append(foo,4) записывает четвёртый элемент в общий массив, не меняя длину foo. Следующий append(foo,5) перезаписывает тот же элемент, видимый через bar. Если свободной ёмкости после трёх элементов не было, оба append выделят независимые массивы и bar сохранит 4. Для независимости явно копируйте слайс.