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.