Junior
Care este diferența cheie dintre slices și array-uri în Go?
sobes.tech AI
Răspuns de la AI
Slice-urile sunt vizualizări ale array-urilor care pot fi modificate dinamic.
| Caracteristică | Array | Slice |
|---|---|---|
| Dimensiune | Fixă, determinată la crearea | Dinamică, poate fi modificată |
| Tip | [n]T (unde n este dimensiunea, T tipul) |
[]T (unde T este tipul) |
| Transmitere în funcții | Pe valoare (copie) | Pe referință la array-ul subiacente, se transmit head, len și cap (de fapt, se creează o nouă structură SliceHeader cu copii ale acestor câmpuri) |
| Creare | var a [5]int sau b := [3]string{"a", "b", "c"} |
var s []int sau t := []int{1, 2, 3} sau u := make([]int, 5) |
| Performanță | Mai previzibilă datorită dimensiunii fixe, poate fi mai eficientă pentru dimensiuni mici | Poate avea costuri suplimentare la schimbarea dimensiunii (realocarea array-ului subiacente) |
// Exemplu de array
var arr [3]int = [3]int{1, 2, 3}
// Exemplu de slice creat din array
slice := arr[1:] // slice {2, 3}
// Exemplu de creare a unui slice
s := []int{10, 20, 30} // array subiacente {10, 20, 30}, lungime = 3, capacitate = 3
// Modificarea slice-ului
s = append(s, 40) // acum s {10, 20, 30, 40}. Dacă nu există suficientă capacitate, se va crea un nou array subiacente, lungime = 4, capacitate = 6 (de obicei dublarea capacității).
// Modificarea unui element al slice-ului modifică array-ul subiacente
slice[0] = 99 // arr devine {1, 99, 3}
fmt.Println(arr)