Wewnętrzne działanie map
Dowiedz się, jak mapy przechowują dane
Wewnętrzne działanie map to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Czym jest mapa
Mapa przechowuje pary klucz-wartość. Każdy klucz wskazuje jedną wartość, a wyszukiwanie jest średnio bardzo szybkie.
W języku Go zapis ma postać map[KeyType]ValueType.
package main
import "fmt"
func main() {
ages := map[string]int{"Ann": 30, "Bob": 25}
fmt.Println(ages["Ann"])
}Tablice haszujące pod spodem
Mapy w języku Go są implementowane jako tablice haszujące. Funkcja haszująca przekształca każdy klucz w liczbę wskazującą kubełek, w którym znajduje się wartość.
Kubełki
Mapa przechowuje wpisy w kubełkach. Każdy kubełek zawiera kilka par klucz-wartość. Hasz klucza decyduje o tym, do którego kubełka trafi, zapewniając średnio szybkie wyszukiwanie O(1).
Tworzenie za pomocą make
Pustą mapę można utworzyć za pomocą make. Opcjonalnie można podać wskazówkę dotyczącą rozmiaru, aby wstępnie przydzielić miejsce.
package main
import "fmt"
func main() {
scores := make(map[string]int)
scores["x"] = 10
fmt.Println(scores)
}Mapy nil
Mapa zadeklarowana bez inicjalizacji ma wartość nil. Z mapy nil można odczytywać dane (otrzyma się wartości zerowe), ale zapis do niej powoduje panikę. Przed zapisem zawsze należy ją zainicjalizować.
package main
import "fmt"
func main() {
var m map[string]int
fmt.Println(m == nil)
fmt.Println(m["missing"])
}Dodawanie i aktualizowanie
Przypisanie wartości do klucza dodaje go, jeśli jest nowy, albo zastępuje istniejącą wartość.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1}
m["b"] = 2
m["a"] = 99
fmt.Println(m)
}Usuwanie kluczy
Wbudowana funkcja delete usuwa klucz. Usunięcie nieistniejącego klucza jest bezpieczną operacją, która nic nie robi.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2}
delete(m, "a")
fmt.Println(m)
}Długość mapy
len zwraca liczbę par klucz-wartość znajdujących się obecnie w mapie.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
fmt.Println(len(m))
}Mapy rosną automatycznie
W miarę dodawania wpisów Go powiększa wewnętrzną tablicę i może ponownie rozmieścić klucze w nowych kubełkach. Dzieje się to automatycznie, więc nie trzeba ręcznie zarządzać pojemnością.
Dozwolone typy kluczy
Klucze muszą być porównywalne, czyli należeć do typów, których można używać z operatorem ==. Działają między innymi napisy, liczby, wartości logiczne oraz struktury z porównywalnymi polami. Wycinki i mapy nie mogą być kluczami.
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}])
}Semantyka referencji
Wartość mapy jest referencją do znajdujących się pod nią danych. Przekazanie mapy do funkcji pozwala tej funkcji modyfikować tę samą mapę, bez potrzeby używania wskaźnika.
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)
}Szybkie sprawdzenie
Co się stanie przy próbie zapisania klucza do mapy nil?
Podsumowanie
Wewnętrzne działanie map:
- Mapy są tablicami haszującymi z kubełkami
- Średnia złożoność wyszukiwania, wstawiania i usuwania wynosi O(1)
- Klucze muszą być porównywalne; zapis do map nil powoduje panikę
- Mapy mają semantykę referencji
Często zadawane pytania
Czy lekcja „Wewnętrzne działanie map” jest bezpłatna?
Tak — pełny tekst „Wewnętrzne działanie map” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wewnętrzne działanie map”?
Dowiedz się, jak mapy przechowują dane Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Wewnętrzne działanie map”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wewnętrzne działanie map
- Sprawdzanie istnienia
- Mapy jako zbiory
- Iterowanie i kolejność