Menu
Coddy logo textTech

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 []string

Questa è 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]
4

Ricorda 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]
4

Ma la capacità rimane la stessa. Fai quindi attenzione: la lunghezza non è sempre uguale alla capacità."

challenge icon

Sfida

Facile

Nel 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

Esercitati da solo: Compilatore Go online