Sobes.tech
Senior

Слайс дар Go чист? Чӣ фарқ дорад аз массив? Чӣ мешавад вақте ки слайсро ба функсия мегузаронем ва унсурҳои онро тағир медиҳем?

sobes.tech AI

Ҷавоб аз AI

Слайс (slice) в Go — это динамический, изменяемый по размеру представление последовательности элементов массива. В отличие от массива, который имеет фиксированную длину и размер, слайс содержит указатель на массив, длину и ёмкость.

Основные отличия слайса от массива:

  • Массив имеет фиксированный размер, заданный при объявлении, например: var arr [5]int.
  • Слайс — это структура, которая ссылается на часть массива, например: var s []int.
  • Слайс можно расширять, изменять длину с помощью встроенных функций, массив — нет.

При передаче слайса в функцию передаётся копия структуры слайса (указатель на массив, длина, ёмкость), но не копируются сами элементы массива. Поэтому если внутри функции изменить элементы слайса (например, s[0] = 10), то изменения будут видны снаружи, так как слайс указывает на тот же массив.

Пример:

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

func main() {
    arr := [3]int{1, 2, 3}
    s := arr[:]
    modify(s)
    fmt.Println(arr) // Выведет [100 2 3]
}