Sobes.tech
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)