Sobes.tech
Middle

Jakie typy danych można używać jako kluczy?

sobes.tech AI

Odpowiedź od AI

W języku Go klucze w mapie mogą być tylko typami obsługującymi operację porównania (==). Wynika to z faktu, że do wyszukiwania klucza w tablicy haszującej konieczne jest porównanie kluczy na równość.

Typy, które można używać jako klucze:

  • Typy podstawowe: int, float64, string, bool itp.
  • Wskaźniki
  • Struktury, jeśli wszystkie ich pola są porównywalne
  • Tablice, jeśli elementy są porównywalne

Typy, których nie można używać jako kluczy:

  • Slicing (slice)
  • Mapy (map)
  • Funkcje

Jest to związane z tym, że te typy nie obsługują porównania za pomocą ==.

Przykład:

m := make(map[string]int)
m["key"] = 42

// Struktura z porównywalnymi polami
 type Point struct {
     X, Y int
 }

m2 := make(map[Point]string)
m2[Point{1, 2}] = "Punkt"

Jeśli spróbujesz użyć slice lub mapy jako klucza, kompilator zgłosi błąd.