Ответ
При передаче массива в функцию он копируется целиком, что может быть неэффективно для больших массивов. Слайс же передаётся по ссылке (под капотом передаётся структура с указателем на массив, длиной и ёмкостью).
Пример:
func modifyArray(arr [3]int) {
arr[0] = 100 // изменяется только копия
}
func modifySlice(s []int) {
s[0] = 100 // изменяется оригинальный массив
}
func main() {
arr := [3]int{1, 2, 3}
sl := []int{1, 2, 3}
modifyArray(arr) // arr не изменится
modifySlice(sl) // sl изменится
}
Ключевые отличия:
- Массивы передаются по значению (копируются)
- Слайсы передаются по ссылке (эффективно)
- Изменения в функции влияют на оригинальный слайс, но не на массив