Sobes.tech
Junior — Middle

Какви данни вътре в slice се предават при извикване на функция с този slice като аргумент?

sobes.tech AI

Отговор от AI

В Go слайсът е структура, която съдържа три полета: указател към масив, дължина и капацитет. Когато слайсът се предава към функция, се копира само тази структура, а не целият масив с данни.

Тоест, при извикване на функция, слайсът се предава по стойност, но се копират само метаданните (указател, дължина, капацитет), а не самите елементи на масива. Това означава, че вътре във функцията слайсът сочи към същия базов масив, и промените в елементите на слайса вътре във функцията ще бъдат видими отвън.

Пример:

func modify(slice []int) {
    slice[0] = 100 // променяме първия елемент
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // ще изведе [100 2 3]
}

Така, при предаване на слайс към функция, се копират само трите полета на структурата на слайса, а данните на масива остават общи.