Sobes.tech
Junior — Middle

Ce date din interiorul slice-ului sunt transmise la apelarea funcției cu acest slice ca argument?

sobes.tech AI

Răspuns de la AI

În Go, un slice este o structură care conține trei câmpuri: un pointer către un array, o lungime și o capacitate. Când un slice este transmis unei funcții, se copiază doar această structură, nu întregul array de date.

Adică, la apelarea unei funcții, slice-ul este transmis pe valoare, dar se copiază doar metadatele (pointer, lungime, capacitate), nu elementele array-ului în sine. Asta înseamnă că în interiorul funcției, slice-ul indică același array de bază, și modificările elementelor slice-ului din interiorul funcției vor fi vizibile și în exterior.

Exemplu:

func modify(slice []int) {
    slice[0] = 100 // schimbăm primul element
}

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

Prin urmare, la transmiterea unui slice către o funcție, se copiază doar cele trei câmpuri ale structurii slice, în timp ce datele array-ului rămân partajate.