Слайсы и массивы: в чём разница и почему это важно
Массив в Go имеет фиксированную длину, которая часть его типа: [3]int и [4]int — разные типы. На практике массивы почти не используют — работают со слайсами.
a := []int{1, 2, 3, 4, 5}
b := a[1:3] // [2 3], но за кулисами тот же массив
b[0] = 99 // теперь a == [1 99 3 4 5] !Ловушка общей памяти
Слайс b ссылается на тот же базовый массив, что и a. Изменили b — изменился и a. Это частый источник багов.
Если нужна независимая копия — используйте copy() или встроенный slices.Clone() из свежих версий Go.