Общий массив в Go
Вырезка смотрит на тот же кусок памяти, что и исходный срез. Это не копия всех чисел: оба имени могут указывать на перекрывающиеся ячейки. Поэтому смена элемента в одном месте видна в другом, если номера совпадают.
Возьмем участок и изменим его первый элемент, затем выведем исходный ряд:
nums := []int{10, 20, 30, 40}
part := nums[1:3]
part[0] = 99
fmt.Println(nums)
fmt.Println(part)
В nums вторым числом станет 99, потому что part[0] - это та же ячейка, что nums[1]. Вырезка и исходный срез делят один базовый массив.
Даны переменные:
base := []int{1, 2, 3, 4}
head := base[0:2]
Поставьте 9 в head[1] и выведите base.
Даны переменные:
row := []int{5, 6, 7, 8}
tail := row[2:]
Измените первый элемент tail и проверьте, изменился ли row в той же позиции.
Скажите, копирует ли вырезка все элементы в новый массив автоматически.