Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

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

Заради това, промените в елементите на слайса вътре във функцията се отразяват на оригиналния масив, но промяната на самия слайс (например, присвояване на нов слайс) не влияе на външния слайс.

Пример:

package main
import "fmt"

func modifySlice(s []int) {
    s[0] = 100       // ще промени елемента на оригиналния масив
    s = append(s, 200) // ще промени локалния слайс, външният няма да се промени
}

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

По този начин, слайсът се предава по стойност, но благодарение на вътрешния указател, промените в елементите са видими извън функцията.