Sobes.tech
Senior

Qual è la differenza tra un array e uno slice in Go?

sobes.tech AI

Risposta dell'AI

In Go, un array è una struttura di dimensione fissa, il cui size viene stabilito al momento della dichiarazione e non può essere modificato. Gli array memorizzano gli elementi in memoria in modo contiguo e, passando un array a una funzione, viene copiata l'intera struttura.

Uno slice è un tipo dinamico e modificabile in dimensione, che rappresenta un riferimento a una sezione sequenziale di un array. Uno slice contiene un puntatore al primo elemento, la lunghezza e la capacità.

Differenze chiave:

  • La dimensione dell'array è fissa, quella dello slice è dinamica.
  • Quando si passa un array, viene copiato, mentre uno slice viene passato per riferimento all'array sottostante.
  • Uno slice può essere esteso (append), un array no.

Esempio:

var arr [3]int = [3]int{1, 2, 3} // array di dimensione fissa

slice := arr[0:2] // slice che fa riferimento ai primi due elementi dell'array

slice = append(slice, 4) // lo slice si espande, eventualmente creando un nuovo array sottostante

In questo modo, gli slice sono utili per lavorare con collezioni dinamiche, mentre gli array sono adatti per insiemi di dati fissi.