Sobes.tech
Junior

Qual è la differenza chiave tra slice e array in Go?

sobes.tech AI

Risposta dell'AI

Gli slice sono viste di array che possono cambiare dinamicamente.

Caratteristica Array Slice
Dimensione Fissa, determinata al momento della creazione Dinamica, può cambiare
Tipo [n]T (dove n è la dimensione, T il tipo) []T (dove T è il tipo)
Passaggio alle funzioni Per valore (copia) Per riferimento all'array sottostante, si passano head, len e cap (in realtà, viene creata una nuova struttura SliceHeader con copie di questi campi)
Creazione var a [5]int o b := [3]string{"a", "b", "c"} var s []int o t := []int{1, 2, 3} o u := make([]int, 5)
Prestazioni Più prevedibile grazie alla dimensione fissa, può essere più efficiente per dimensioni piccole Può avere overhead durante le modifiche di dimensione (rileallocazione dell'array sottostante)
// Esempio di array
var arr [3]int = [3]int{1, 2, 3}

// Esempio di slice creato dall'array
slice := arr[1:] // slice {2, 3}

// Esempio di creazione di uno slice
s := []int{10, 20, 30} // array sottostante {10, 20, 30}, len = 3, cap = 3

// Modifica dello slice
s = append(s, 40) // ora s {10, 20, 30, 40}. Se la capacità non è sufficiente, viene creato un nuovo array sottostante, len = 4, cap = 6 (solitamente raddoppia la capacità).

// La modifica di un elemento dello slice modifica l'array sottostante
slice[0] = 99 // arr ora {1, 99, 3}
fmt.Println(arr)