Guida per principianti sugli array dinamici in Go - Slices

Ciao a tutti, futuri programmatori Go! Oggi esploreremo una delle strutture dati più versatili e potenti di Go: i slices. Pensa ai slices come alle multiutensili svizzere della programmazione Go - sono flessibili, efficienti e una volta che li padronizzi, ti chiederai come hai mai programmato senza di loro!

Go - Slice

Cos'è un Slice?

Prima di immergerci, mettiamo le basi. Immagina di organizzare una festa (ovviamente, una festa di programmazione!). Hai bisogno di una lista di ospiti, ma non sei sicuro di quanti persone verranno. Ecco dove i slices brillano! Sono come liste di ospiti dinamiche che possono crescere o restringersi secondo necessità.

In Go, un slice è una vista flessibile e dinamica su un array. È come una finestra che può aggiustare la sua dimensione, permettendoti di lavorare con una parte di un array o persino creare uno completamente nuovo sul volo.

Definire un Slice

Iniziamo creando il nostro primo slice. Ci sono diversi modi per farlo, esploriamoli uno per uno.

Metodo 1: Utilizzando la funzione make()

guestList := make([]string, 3)
fmt.Println(guestList) // Output: [  ]

In questo esempio, abbiamo creato un slice di stringhe con una lunghezza iniziale di 3. È come preparare tre sedie vuote per la nostra festa. La funzione make() è il nostro organizzatore di feste, preparando lo spazio per i nostri ospiti.

Metodo 2: Literal di slice

guestList := []string{"Alice", "Bob", "Charlie"}
fmt.Println(guestList) // Output: [Alice Bob Charlie]

Qui, stiamo creando un slice e riempendolo immediatamente con gli ospiti. È come avere una lista VIP pronta all'uso!

Metodo 3: Tagliare un array esistente

partyRoom := [5]string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := partyRoom[0:3]
fmt.Println(vipGuests) // Output: [Alice Bob Charlie]

In questo caso, stiamo creando un slice da un array esistente. È come selezionare le prime tre persone dalla nostra sala per essere nella lista VIP.

Funzioni len() e cap()

Ora che abbiamo le nostre liste di ospiti, parliamo di due funzioni importanti: len() e cap().

guestList := make([]string, 3, 5)
fmt.Printf("Lunghezza: %d, Capacità: %d\n", len(guestList), cap(guestList))
// Output: Lunghezza: 3, Capacità: 5
  • len() ci dice quanti ospiti ci sono attualmente nella nostra lista.
  • cap() ci dice quanti ospiti la nostra lista può contenere prima di dover crescere.

Pensa a len() come al numero di sedie attualmente sistemate e a cap() come al numero totale di sedie disponibili nella sala della festa.

Slice nil

A volte, potresti dichiarare un slice ma non inizializzarlo. Questo è chiamato un slice nil.

var emptyList []string
fmt.Println(emptyList == nil) // Output: true

Un slice nil è come avere un'idea di una lista di ospiti ma non aver ancora creato la lista. È perfettamente valido e può essere utile in alcune situazioni!

Sottoslice

Sottoslice è come creare una sezione VIP nella tua festa. Puoi selezionare una parte di un slice esistente per crearne uno nuovo.

fullGuestList := []string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := fullGuestList[1:4]
fmt.Println(vipGuests) // Output: [Bob Charlie David]

Qui, stiamo selezionando gli ospiti dall'indice 1 all'3 (ricorda, l'indice finale è esclusivo) per essere i nostri VIP.

Funzioni append() e copy()

append()

La funzione append() è come avere un bouncer che può aggiungere nuovi ospiti alla tua festa.

guestList := []string{"Alice", "Bob"}
guestList = append(guestList, "Charlie")
fmt.Println(guestList) // Output: [Alice Bob Charlie]

Puoi persino aggiungere più ospiti alla volta:

guestList = append(guestList, "David", "Eve")
fmt.Println(guestList) // Output: [Alice Bob Charlie David Eve]

copy()

La funzione copy() è come avere un organizzatore di feste che può duplicare la tua lista di ospiti.

originalList := []string{"Alice", "Bob", "Charlie"}
newList := make([]string, len(originalList))
copiedElements := copy(newList, originalList)
fmt.Printf("Copiati %d elementi. Nuova lista: %v\n", copiedElements, newList)
// Output: Copiati 3 elementi. Nuova lista: [Alice Bob Charlie]

Tabella dei metodi Slice

Ecco una comoda tabella che riassume i metodi chiave del slice che abbiamo discusso:

Metodo Descrizione Esempio
make() Crea un slice make([]int, 5)
len() Restituisce la lunghezza di un slice len(slice)
cap() Restituisce la capacità di un slice cap(slice)
append() Aggiunge elementi a un slice slice = append(slice, 1, 2, 3)
copy() Copia elementi da un slice a un altro copy(destSlice, sourceSlice)
Sottoslice Crea un nuovo slice da uno esistente newSlice := slice[1:4]

Eccoci, amici! Avete appena fatto i vostri primi passi nel meraviglioso mondo dei slices di Go. Ricorda, la pratica fa la perfezione, quindi non abbiate paura di sperimentare con questi concetti. Create le vostre liste di ospiti, giocate con l'appendere e copiare, e presto sarete in grado di tagliare e sminuzzare il codice Go come un professionista!

Buon coding, e possa i vostri slices essere sempre della misura perfetta per le vostre esigenze!

Credits: Image by storyset