Meccanismi interni delle map
Come le map memorizzano i dati
Meccanismi interni delle map è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Che cos'è una map
Una map memorizza coppie chiave-valore. Ogni chiave è associata a un valore e le ricerche sono mediamente molto veloci.
In Go si scrive map[KeyType]ValueType.
package main
import "fmt"
func main() {
ages := map[string]int{"Ann": 30, "Bob": 25}
fmt.Println(ages["Ann"])
}Le tabelle hash sottostanti
Le map di Go sono implementate come tabelle hash. Una funzione hash trasforma ogni chiave in un numero che indica il bucket in cui si trova il valore.
Bucket
La map memorizza le voci nei bucket. Ogni bucket contiene diverse coppie chiave-valore. L'hash di una chiave determina il bucket a cui appartiene, garantendo ricerche mediamente veloci in O(1).
Creazione con make
È possibile creare una map vuota con make. Facoltativamente, si può fornire un suggerimento sulla dimensione per preallocare lo spazio.
package main
import "fmt"
func main() {
scores := make(map[string]int)
scores["x"] = 10
fmt.Println(scores)
}Map nil
Una map dichiarata senza inizializzazione è nil. È possibile leggere da una map nil, ottenendo i valori zero, ma scriverci provoca un panic. Inizializzi sempre la map prima di scriverci.
package main
import "fmt"
func main() {
var m map[string]int
fmt.Println(m == nil)
fmt.Println(m["missing"])
}Aggiunta e aggiornamento
L'assegnazione a una chiave la aggiunge se è nuova oppure sovrascrive il valore esistente.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1}
m["b"] = 2
m["a"] = 99
fmt.Println(m)
}Eliminazione delle chiavi
La funzione incorporata delete rimuove una chiave. Eliminare una chiave inesistente è un'operazione sicura che non produce alcun effetto.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2}
delete(m, "a")
fmt.Println(m)
}Lunghezza di una map
len restituisce il numero attuale di coppie chiave-valore nella map.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
fmt.Println(len(m))
}Le map crescono automaticamente
Quando si aggiungono voci, Go espande la tabella sottostante e può ricalcolare l'hash delle chiavi per inserirle in nuovi bucket. Questo avviene automaticamente, quindi non è necessario gestire manualmente la capacità.
Tipi di chiave consentiti
Le chiavi devono essere comparabili: tipi che è possibile usare con ==. Stringhe, numeri, valori booleani e struct composte da campi comparabili funzionano. Gli slice e le map non possono essere usati come chiavi.
package main
import "fmt"
func main() {
type Point struct{ X, Y int }
m := map[Point]string{{1, 2}: "origin-ish"}
fmt.Println(m[Point{1, 2}])
}Semantica di riferimento
Un valore map è un riferimento ai dati sottostanti. Passare una map a una funzione consente alla funzione di modificare la stessa map, senza bisogno di un puntatore.
package main
import "fmt"
func addOne(m map[string]int) {
m["count"]++
}
func main() {
m := map[string]int{"count": 0}
addOne(m)
fmt.Println(m)
}Verifica rapida
Che cosa succede se si prova a scrivere una chiave in una map nil?
Riepilogo
Struttura interna delle map:
- Le map sono tabelle hash organizzate in bucket
- Ricerca, inserimento ed eliminazione hanno costo medio O(1)
- Le chiavi devono essere comparabili; la scrittura in una map nil provoca un panic
- Le map hanno semantica di riferimento
Domande Frequenti
La lezione «Meccanismi interni delle map» è gratuita?
Sì — il testo completo di «Meccanismi interni delle map» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Meccanismi interni delle map»?
Come le map memorizzano i dati Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Meccanismi interni delle map»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Meccanismi interni delle map
- Verificare l'esistenza
- Map come set
- Iterazione e ordinamento