Sobes.tech
Junior — Middle

Jakie typy danych mogą pełnić rolę klucza w kontenerze map?

sobes.tech AI

Odpowiedź od AI

W Go kluczem w mapie mogą być tylko typy danych, które są porównywalne (comparable). Oznacza to, że dla klucza musi być zdefiniowany operator ==.

Odpowiednie typy kluczy:

  • Wartości boolowskie (bool)
  • Liczby (int, float64, uint8 itd.)
  • Ciągi znaków (string)
  • Wskaźniki
  • Kanały
  • Interfejsy, jeśli typ dynamiczny jest porównywalny
  • Struktury, jeśli wszystkie pola są porównywalne

Nie można używać jako klucza:

  • Slicing (slice)
  • Map (map)
  • Funkcji

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ć typu nieporównywalnego jako klucza, kompilator zgłosi błąd.