Sobes.tech
Junior — Middle

Koji podaci unutar slice-a se prosleđuju prilikom poziva funkcije sa ovim slice-om kao argumentom?

sobes.tech АИ

Одговор од АИ

У Go, slice је структура која садржи три поља: показивач на низ, дужину и капацитет. Када се slice пренесе у функцију, копира се управо ова структура, а не цео низ података.

То значи да се при позиву функције, slice преноси по вредности, али се копирају само метаподаци (показивач, дужина, капацитет), а не елементи низа. То значи да унутар функције, slice указује на исти основни низ, и измене елемената унутар функције ће бити видљиве и споља.

Пример:

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

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // исписаће [100 2 3]
}

Стога, при преносу slice у функцију, копирају се само три поља структуре slice, а подаци низа остају заједнички.