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, а подаци низа остају заједнички.