0Pricing
Go Academy · Lekcja

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

  1. Wewnętrzne działanie map
  2. Sprawdzanie istnienia
  3. Mapy jako zbiory
  4. Iterowanie i kolejność
← Powrót do Go Academy