Sobes.tech
Back to questions
Middle+
4

Чем отличается передача слайса и массива в функцию?

Companies where asked
МВидеоМВидео

Answer from AI

sobes.tech AI

В Go массивы и слайсы передаются в функции по-разному:

  • Массивы передаются по значению, то есть копируются целиком. Изменения внутри функции не влияют на оригинальный массив.
  • Слайсы — это структура, содержащая указатель на массив, длину и емкость. При передаче слайса копируется только эта структура (24 байта), но она указывает на тот же underlying массив. Поэтому изменения элементов слайса внутри функции отражаются на оригинальных данных.

Пример:

func modifyArray(arr [3]int) {
    arr[0] = 100
}

func modifySlice(s []int) {
    s[0] = 100
}

func main() {
    a := [3]int{1, 2, 3}
    modifyArray(a)
    fmt.Println(a) // [1 2 3] - не изменился

    s := []int{1, 2, 3}
    modifySlice(s)
    fmt.Println(s) // [100 2 3] - изменился
}

Таким образом, слайсы удобнее для передачи больших наборов данных, когда нужно изменять содержимое, а массивы — когда нужна копия.