Capacità della slice
Lezione 7 di 21 del corso Slice e mappe in GoLang di Coddy.
Una delle cose che possono creare confusione quando si lavora con le slice è la differenza tra lunghezza e capacità. In questa lezione approfondiremo il significato della capacità di una slice.
Bene, iniziamo. Questa dichiarazione crea una nuova slice come questa:
var names []stringQuesta è una nuova slice, quindi non ha un array di supporto e, di conseguenza, tutti i suoi campi sono a zero.
Quando usiamo la funzione <strong>len</strong> o la funzione <strong>cap</strong> su questa slice, entrambe restituiscono 0. Tuttavia, quando uso invece un literal di slice, questa volta Go crea un nuovo array di supporto:
names := []string{"Python", "Java", "Rust"}Qui, in questo ultimo literal ci sono tre elementi, ed è per questo che anche l'array di supporto della slice <strong>names</strong> ha tre elementi. Pertanto, la capacità è la lunghezza dell'array di supporto di una slice, non la lunghezza della slice stessa.
Per capirlo meglio, vediamo un altro esempio:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:]Quindi, pensaci: qual è la capacità della slice <strong>nameSlice</strong> in questo esempio?
La risposta è 4. Qui partiamo dall'indice 1 fino alla fine della slice, e possiamo verificarlo:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:]
fmt.Println(nameSlice)
fmt.Println(cap(nameSlice))Il risultato sarà:
[Golang Rust JavaScript Haskell]
4Ricorda quindi che, per contare la capacità, partiamo dalla prima posizione fino alla fine della slice.
Anche se facciamo qualcosa del genere:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:4]
fmt.Println(nameSlice)
fmt.Println(cap(nameSlice))Qui, la lunghezza cambia e otteniamo solo <strong>three elements</strong>:
[Golang Rust JavaScript]
4Ma la capacità rimane la stessa. Fai quindi attenzione: la lunghezza non è sempre uguale alla capacità."
Sfida
FacileNel codice fornito, definiamo una slice di 10 elementi.
- Esegui lo slicing per creare un'altra slice e stampa la sua capacità sullo schermo. Dovrebbe essere uguale a 6.
Provalo tu
package main
import (
"fmt"
)
func main() {
// Slice di 10 elementi
lang := []string{"Python", "Java", "JavaScript", "C++", "Go", "Ruby", "Swift", "Rust", "PHP", "Kotlin"}
// Esegui lo slicing qui
// Completa la funzione Print
fmt.Println("the capacity of this Slice is :" ?)
}Tutte le lezioni di Slice e mappe in GoLang
1Introduzione
IntroduzioneEsercitati da solo: Compilatore Go online