Sobes.tech
Junior — Middle

Cum se transmite un slice către o funcție într-un limbaj de programare?

sobes.tech AI

Răspuns de la AI

În Go, un slice este transmis unei funcții prin valoare, dar slice-ul conține un pointer către un array, precum și lungimea și capacitatea sa. Aceasta înseamnă că, atunci când se transmite un slice către o funcție, se copiază structura slice-ului, dar nu și datele array-ului la care acesta face referire.

Din cauza acestui fapt, modificările elementelor slice-ului în interiorul funcției se reflectă în array-ul original, dar modificarea propriu-zisă a slice-ului (de exemplu, atribuirea unui nou slice) nu afectează slice-ul extern.

Exemplu:

package main
import "fmt"

func modifySlice(s []int) {
    s[0] = 100       // va modifica elementul array-ului original
    s = append(s, 200) // va modifica slice-ul local, cel extern nu va fi afectat
}

func main() {
    s := []int{1, 2, 3}
    modifySlice(s)
    fmt.Println(s) // Va afișa: [100 2 3]
}

Astfel, slice-ul este transmis prin valoare, dar datorită pointerului intern, modificările elementelor sunt vizibile în afara funcției.