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]
}
Така, при предаване на слайс към функция, се копират само трите полета на структурата на слайса, а данните на масива остават общи.